
Zabbix 是企业级开源监控的事实标准之一,能够监控网络设备、服务器、虚拟机、容器乃至应用指标。随着版本演进,Zabbix 8.0 已成为当前最新的稳定版(LTS),在性能、可观测性和用户体验上都有明显提升。
用 Docker 部署 Zabbix 是目前最推荐的方式:环境隔离、版本可控、升级简单,一条 docker compose up 就能拉起一整套监控平台。本文基于官方镜像,手把手带你用 Docker Compose 部署 Zabbix Server + Web 前端 + MySQL + Agent2,并总结大量实战中容易踩坑的注意事项。
说明:文中镜像统一使用
alpine-latest标签,始终拉取当前最新稳定版(目前即 Zabbix 8.0 LTS)。若需要锁定大版本,可把alpine-latest替换为alpine-8.0-latest。
在开始之前,请确认宿主机满足以下要求:
docker compose version 可查)如果你的宿主机还没有 Docker,可以用官方一键脚本安装:
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
systemctl enable --now docker
docker compose version我们采用最经典的单节点全套部署,组件如下:
组件 | 镜像 | 作用 | 端口 |
|---|---|---|---|
MySQL |
| 存储配置与历史数据 | 3306 |
Zabbix Server |
| 核心采集与告警引擎 | 10051 |
Zabbix Web |
| Nginx + PHP 前端界面 | 8080 |
Zabbix Agent2 |
| 监控宿主机本身(含 Docker 监控) | 10050 |
各容器通过 Docker Compose 默认网络以服务名互相发现(mysql-server、zabbix-server 等),无需手动配置 IP。
新建工作目录并创建编排文件:
mkdir -p /opt/zabbix && cd /opt/zabbix
mkdir -p mysql-data zabbix-server agent2docker-compose.yml 完整内容如下(注意替换其中的密码):
version: '3.5'
services:
mysql-server:
image: mysql:8.0
container_name: zabbix-mysql
restart: unless-stopped
# 关键:MySQL 8 开启 binlog 时,Zabbix 初始化建库函数需要该变量,否则建库失败
command:
- --log-bin-trust-function-creators=1
- --character-set-server=utf8mb4
- --collation-server=utf8mb4_bin
environment:
MYSQL_DATABASE: zabbix
MYSQL_USER: zabbix
MYSQL_PASSWORD: Zabbix@123456
MYSQL_ROOT_PASSWORD: Root@123456
volumes:
- ./mysql-data:/var/lib/mysql
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-pRoot@123456"]
interval: 10s
timeout: 5s
retries: 10
zabbix-server:
image: zabbix/zabbix-server-mysql:alpine-latest
container_name: zabbix-server
restart: unless-stopped
depends_on:
mysql-server:
condition: service_healthy
environment:
DB_SERVER_HOST: mysql-server
MYSQL_DATABASE: zabbix
MYSQL_USER: zabbix
MYSQL_PASSWORD: Zabbix@123456
MYSQL_ROOT_PASSWORD: Root@123456
ZBX_JAVAGATEWAY: zabbix-java-gateway
ZBX_JAVAGATEWAY_ENABLE: "true"
TZ: Asia/Shanghai
ports:
- "10051:10051"
volumes:
- ./zabbix-server:/etc/zabbix
zabbix-java-gateway:
image: zabbix/zabbix-java-gateway:alpine-latest
container_name: zabbix-java-gateway
restart: unless-stopped
environment:
TZ: Asia/Shanghai
zabbix-web:
image: zabbix/zabbix-web-nginx-mysql:alpine-latest
container_name: zabbix-web
restart: unless-stopped
depends_on:
- mysql-server
- zabbix-server
environment:
DB_SERVER_HOST: mysql-server
MYSQL_DATABASE: zabbix
MYSQL_USER: zabbix
MYSQL_PASSWORD: Zabbix@123456
ZBX_SERVER_HOST: zabbix-server
PHP_TZ: Asia/Shanghai
ports:
- "8080:8080"
zabbix-agent2:
image: zabbix/zabbix-agent2:alpine-latest
container_name: zabbix-agent2
restart: unless-stopped
depends_on:
- zabbix-server
environment:
ZBX_SERVER_HOST: zabbix-server
ZBX_HOSTNAME: Zabbix server
TZ: Asia/Shanghai
ports:
- "10050:10050"
volumes:
# 只读挂载 docker.sock,启用 Zabbix 对容器的监控模板
- /var/run/docker.sock:/var/run/docker.sock:ro
- /etc/localtime:/etc/localtime:ro在 docker-compose.yml 所在目录执行:
docker compose up -d第一次启动会经历"拉镜像 → 建库 → 导入 Zabbix schema → Server 启动"的过程,通常需要 3~5 分钟。期间可以通过日志观察进度:
docker compose ps
docker compose logs -f zabbix-server当你在 Server 日志中看到类似 Zabbix server started 的提示,说明核心服务已就绪。
随后在浏览器访问 http://<你的服务器IP>:8080,使用默认账号登录:
Adminzabbix若页面提示数据库未初始化或连接失败,多半是 MySQL 还没建库完成,稍等片刻刷新即可。
上面编排里已经启动了 zabbix-agent2 容器,并在 Web 中默认会有一个名为 Zabbix server 的主机。进入「监测 → 主机 → Zabbix server」,确认其"Zabbix agent"可用性为绿色(可用)。然后给它链接官方模板:
Templates/Operating systems 下的 Linux by Zabbix agent2Template App Docker)等待几分钟,就能在「最新数据」里看到 CPU、内存、磁盘、Docker 容器等指标。
在需要被监控的机器上安装 Agent2(以 CentOS/RHEL 为例):
rpm -Uvh https://repo.zabbix.com/zabbix/8.0/rhel/9/x86_64/zabbix-release-latest-8.0.el9.noarch.rpm
dnf install -y zabbix-agent2 zabbix-agent2-plugin-*修改配置,把 Server 指向你的 Zabbix Server 地址(被动模式)并设主机名:
sed -i 's/^Server=127.0.0.1/Server=192.168.1.100/' /etc/zabbix/zabbix_agent2.conf
sed -i 's/^Hostname=Zabbix server/Hostname=web-node-01/' /etc/zabbix/zabbix_agent2.conf
systemctl enable --now zabbix-agent2然后在 Web 端「数据采集 → 主机」中新建主机,主机名与 Agent 的 Hostname 保持一致,并链接 Linux by Zabbix agent2 模板即可。
log_bin_trust_function_creators=1:从 Zabbix 6.0 起,初始化建库会创建存储函数,若 MySQL 开启二进制日志又未授权,建库会直接失败。本文已在 command 中预置,使用外部独立 MySQL 时务必同样配置。latest 或都 8.0-latest),混用会导致协议不兼容、数据异常。TZ=Asia/Shanghai,Web 设置 PHP_TZ=Asia/Shanghai,否则告警时间、图表时间会错乱,排查问题时非常迷惑。mysql-data、各组件配置目录都要挂载 volume,否则容器重建后历史数据与配置全部丢失。Admin/zabbix 是公开默认凭据,上线前务必修改,并建议创建专用低权限账号日常使用。started 再访问。CacheSize、HistoryCacheSize 等参数需要按需调大,默认配置在主机数上千时会成为瓶颈。latest 标签虽然方便,但大版本升级(如将来 8.0→9.0)建议先在测试环境验证,并提前备份 mysql-data 后再升级。Q1:Web 页面打不开或一直转圈?
先确认容器都在运行:docker compose ps。再看 zabbix-web 日志是否有连不上数据库或 PHP 报错,多半是 MySQL 还没就绪,等待即可。
Q2:Zabbix server 一直重启?
最常见原因是连不上 MySQL 或数据库未初始化完成。查看 docker compose logs zabbix-server,若提示数据库函数创建失败,检查 log_bin_trust_function_creators 是否设置。
Q3:主机可用性显示红色(不可用)?
检查 Agent 的 Server 配置是否指向正确地址、Hostname 是否与 Web 中主机名一致;被动模式还要确认 Server 到 Agent 的 10050 端口通畅。
Q4:最新数据里看不到指标?
确认主机已链接对应模板,且 Agent 可用性为绿色;新链接模板后通常需要 1~3 个采集周期(默认 1 分钟)才有数据。
通过 Docker Compose,我们可以在几分钟内搭建一套功能完整的 Zabbix 8.0 监控平台:MySQL 负责存储,Zabbix Server 负责采集与告警,Web 提供可视化,Agent2 负责主机与容器指标采集。只要把文中提到的版本一致、时区统一、数据持久化、MySQL 建库参数、默认密码修改这五个关键点处理好,绝大多数部署问题都能迎刃而解。
后续你可以继续接入 SNMP 设备、JMX 应用、以及通过 Proxy 实现大规模分布式监控,Zabbix 的扩展能力足以支撑从几十台到上万节点的监控场景。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。