在Docker中运行Zabbix应使用Docker Compose编排zabbix-server-pgsql、zabbix-web-nginx-pgsql和postgres三服务,通过自定义网络互联,指定明确版本镜像,挂载必要卷,配置时区与数据库连接,启动后验证日志、数据库及Web访问,再修改密码、启用监控协议并加固安全。

在Docker中运行Zabbix监控系统,核心是用官方或社区维护的镜像快速启动Zabbix Server、Web前端和数据库(PostgreSQL/MySQL),并确保三者网络互通、配置正确。不推荐单容器部署,应使用Docker Compose统一编排,兼顾可维护性与生产可用性。
准备基础环境与镜像选择
Zabbix官方提供完整Docker镜像套件(zabbix/zabbix-server-pgsql、zabbix/zabbix-web-nginx-pgsql、postgres),推荐搭配PostgreSQL使用——比MySQL更稳定,且官方镜像默认优化适配。确认已安装Docker 20.10+ 和 docker-compose v2+:
- Linux用户建议关闭SELinux或配置正确策略,避免挂载权限拒绝
- 宿主机需开放端口:8080(Web)、10051(Server监听)、5432(PostgreSQL,仅内部通信,不暴露)
- 避免使用 latest 标签,指定明确版本如 zabbix/zabbix-server-pgsql:6.4-alpine,保证可复现
编写docker-compose.yml编排服务
创建 docker-compose.yml 文件,定义 PostgreSQL、Zabbix Server、Zabbix Web 三个服务,并通过自定义桥接网络互联:
- PostgreSQL服务启用初始化脚本(zabbix-postgres-init.sql),由Zabbix镜像自动执行建库建用户
- Zabbix Server设置 DB_SERVER_HOST: postgres,依赖PostgreSQL服务名而非IP
- Zabbix Web配置 ZBX_SERVER_HOST: zabbix-server,指向Server容器名;时区设为 Asia/Shanghai 避免时间错乱
- 所有服务挂载必要卷:数据库数据目录、Zabbix配置文件(如 /etc/zabbix/zabbix_server.conf.d/)、SSL证书(若启HTTPS)
启动并验证Zabbix服务状态
执行 docker-compose up -d 后,等待约30秒让数据库初始化完成。用以下命令逐项检查:
- docker-compose logs -f zabbix-server 查看是否输出 Zabbix Server started.
- docker-compose exec postgres psql -U zabbix -d zabbix -c "SELECT version();" 确认数据库连接正常
- 浏览器访问 http://localhost:8080,首次加载会进入Web安装向导——跳过,因镜像已预置数据库结构
- 登录默认账号:Admin / zabbix,进入“Monitoring → Dashboard”确认数据采集正常
后续关键配置与安全加固
初始运行后必须调整几项,否则无法用于实际监控:
- 修改Web界面密码:进入“Administration → Users → Admin → Change password”,禁用弱口令
- 启用SNMP、JMX或自定义脚本监控时,在 /etc/zabbix/zabbix_server.conf 挂载目录中添加对应参数(如 StartSNMPTrapper=1),然后重启server容器
- 若需外网访问Web,改用Nginx反向代理并配置TLS证书,禁用Zabbix Web内置HTTP服务的直接暴露
- 定期备份PostgreSQL数据卷,或配置外部持久化存储(如NFS、云盘),避免容器重建丢失历史数据

















