Zabbix 7.0 容器化部署
一、前言
Zabbix 是企业级主流开源分布式监控平台,具备数据采集、阈值告警、图形可视化、自动化运维等核心能力。Zabbix 7.0 为长期支持版本(LTS),生态成熟、稳定性高、适配性广,是企业生产环境首选版本。
本文基于 Ubuntu 24.04 操作系统,严格参照 Zabbix 官方容器文档 落地部署,提供两种主流实战方案:
-
单组件独立 Docker 分步启动(学习/调试场景)
-
Docker Compose 编排一键部署(生产推荐)
覆盖零基础部署、运维排错、版本升级全流程。
采用容器化部署核心优势:
-
环境一致性:开发、测试、生产复用统一官方镜像,彻底规避环境差异导致的兼容报错
-
部署高效:单命令启动服务,无需编译、配置依赖,开箱即用
-
隔离性强:各组件独立容器运行,互不干扰,资源管控精细
-
弹性扩展:后续新增 Zabbix Proxy、Java 监控、多节点 Agent 仅需新增容器
-
运维便捷:版本升级、回滚仅需替换镜像标签,对业务影响极小
整体技术栈:
-
数据库:MySQL 8.0(持久化监控元数据、时序数据、告警规则、主机配置)
-
Web 服务:Nginx + PHP 8.4(官方 Ubuntu 基底镜像内置,无需手动安装编译)
-
核心服务:Zabbix Server 7.0 LTS(监控核心引擎)
-
运行环境:Docker Engine + Docker Compose Plugin
1.1 Zabbix官方容器镜像规范
Zabbix 官方为所有组件提供独立 Docker 镜像,托管于 Docker Hub。镜像区分系统基底(Alpine、Ubuntu、CentOS),本文统一使用 Ubuntu 基底镜像,稳定性、兼容性更适合生产长期运行。
重要标签说明(官方真实规则)
-
Zabbix 7.0 LTS:官方仅提供
<基底>-7.0-latest动态标签,无ubuntu2404-7.0.x细分小版本标签;镜像底层默认基于 Ubuntu 24.04,内置 PHP 8.4,完全匹配环境要求。 -
Zabbix 7.2 及以上版本:提供
<基底>-7.2.x固定小版本标签,可精准锁定版本。 -
MySQL:使用官方
mysql:8.0通用标签,兼容 Zabbix 7.x 全系列。
| 核心组件 | 7.0 LTS 官方可用镜像标签 | 核心用途 |
| 数据库 | mysql:8.0 | 存储Zabbix全量监控配置与业务数据,稳定兼容7.x全系列版本 |
| Zabbix核心服务 | zabbix/zabbix-server-mysql:ubuntu-7.0-latest | 监控核心引擎,处理数据采集、告警触发、数据持久化 |
| Web管理界面 | zabbix/zabbix-web-nginx-mysql:ubuntu-7.0-latest | 可视化运维入口,内置Nginx+PHP8.4运行环境 |
| Java网关 | zabbix/zabbix-java-gateway:ubuntu-7.0-latest | 可选组件,用于监控JVM、Tomcat、Spring等Java应用 |
| 客户端Agent | zabbix/zabbix-agent:ubuntu-7.0-latest | 部署于被监控节点,主动采集系统指标并上报服务端 |
补充:标签查询命令(自查镜像可用性)
# 安装工具查询官方镜像标签
sudo apt install -y jq
# 查询 Zabbix Server 7.0 所有标签
curl -s https://hub.docker.com/v2/repositories/zabbix/zabbix-server-mysql/tags?name=7.0 | jq -r '.results[].name'
1.2 全局端口规划(官方默认,生产不建议修改)
所有端口为Zabbix官方标准端口,无特殊业务冲突场景,禁止自定义修改,避免组件通信异常。
-
MySQL数据库:3306
-
Zabbix Server:10051(接收Agent上报数据)
-
Zabbix Web:容器内部8080端口,宿主机映射80端口(直接IP访问)
-
Zabbix Agent:10050(服务端主动拉取监控指标)
二、基础环境准备
2.1 前置清理:卸载系统旧版Docker
Ubuntu 自带的 docker.io 为精简旧版,与官方 Docker Engine 存在兼容冲突,部署前彻底卸载。仅清理软件包,原有镜像、容器、数据卷不会丢失。
for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do
sudo apt-get remove -y $pkg
done
2.2 安装官方完整版Docker Engine
采用Docker官方APT仓库安装,适配Ubuntu 24.04,内置Compose插件,无需额外安装。
# 1. 更新系统软件源,安装基础依赖
sudo apt update
sudo apt install -y ca-certificates curl
# 2. 创建密钥存储目录,配置权限
sudo install -m 0755 -d /etc/apt/keyrings
# 3. 导入Docker官方GPG密钥,校验软件完整性
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
# 4. 写入Docker官方APT软件源
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# 5. 更新源并安装Docker全套组件
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
2.3 环境验证与权限优化(必做)
# 验证Docker版本
docker --version
# 验证Compose插件版本
docker compose version
权限优化:免 sudo 执行 docker 命令
sudo usermod -aG docker $USER
✅ 关键:执行后重新登录服务器,权限方可生效,无需重启系统。
三、方案一:单组件Docker分步启动(学习/调试专用)
本方案适用于新手学习、组件调试、故障排错,可清晰梳理各组件依赖关系。
启动顺序:MySQL → Zabbix Server → Zabbix Web → 可选组件(Java Gateway / Agent),顺序错误会导致初始化失败。
3.1 创建专属Docker网桥网络
实现容器间通过容器名DNS互通,不受宿主机IP、网卡变动影响。
docker network create --subnet 172.20.0.0/16 zabbix-net
# 校验网络
docker network ls
3.2 启动MySQL 8.0数据库容器(核心避坑配置)
Zabbix 6.0+ 初始化需创建存储过程/函数,MySQL 开启 binlog 时必须配置 log_bin_trust_function_creators=1,否则初始化失败。
# 创建数据持久化目录
mkdir -p /data/zabbix/mysql
# 启动MySQL容器
docker run -d \
--name mysql-zabbix \
--network zabbix-net \
--restart unless-stopped \
-p 3306:3306 \
-v /data/zabbix/mysql:/var/lib/mysql \
-v /etc/localtime:/etc/localtime:ro \
-e MYSQL_DATABASE=zabbix \
-e MYSQL_USER=zabbix \
-e MYSQL_PASSWORD=Zabbix@123456 \
-e MYSQL_ROOT_PASSWORD=Root@123456 \
mysql:8.0 \
--character-set-server=utf8mb4 \
--collation-server=utf8mb4_bin \
--default-authentication-plugin=mysql_native_password \
--log_bin_trust_function_creators=1
核心参数详解:
-
--log_bin_trust_function_creators=1:放行普通用户创建存储过程/函数,解决初始化报错 -
utf8mb4+utf8mb4_bin:Zabbix 唯一兼容编码,支持中文与特殊字符 -
--default-authentication-plugin=mysql_native_password:适配 Zabbix 连接 MySQL 8.0 -
挂载
/etc/localtime:同步宿主机时区,解决时间错位
启动验证:docker logs mysql-zabbix,无 ERROR 即为正常。
3.3 启动Zabbix Server 7.0核心服务容器
强依赖MySQL,通过容器名内网通信。
# 创建数据目录
mkdir -p /data/zabbix/server
docker run -d \
--name zabbix-server \
--network zabbix-net \
--restart unless-stopped \
-p 10051:10051 \
-v /data/zabbix/server:/var/lib/zabbix \
-v /etc/localtime:/etc/localtime:ro \
-e DB_SERVER_HOST=mysql-zabbix \
-e MYSQL_DATABASE=zabbix \
-e MYSQL_USER=zabbix \
-e MYSQL_PASSWORD=Zabbix@123456 \
zabbix/zabbix-server-mysql:ubuntu-7.0-latest
启动验证:等待30秒初始化,执行 docker logs zabbix-server,出现 server started 即为正常。
3.4 启动Zabbix Web可视化界面(Nginx+PHP8.4)
内置 Nginx + PHP 8.4,仅需配置连接参数。
docker run -d \
--name zabbix-web \
--network zabbix-net \
--restart unless-stopped \
-p 80:8080 \
-e ZBX_SERVER_HOST=zabbix-server \
-e DB_SERVER_HOST=mysql-zabbix \
-e MYSQL_DATABASE=zabbix \
-e MYSQL_USER=zabbix \
-e MYSQL_PASSWORD=Zabbix@123456 \
-e PHP_TZ=Asia/Shanghai \
zabbix/zabbix-web-nginx-mysql:ubuntu-7.0-latest
PHP_TZ=Asia/Shanghai 强制东八区,解决页面时间慢8小时问题。
启动验证:docker logs zabbix-web 无报错,浏览器访问 http://服务器IP 进入登录页。
3.5 可选:启动Zabbix Agent客户端(监控本机)
采集宿主机系统指标并上报至 Zabbix Server。
docker run -d \
--name zabbix-agent \
--network zabbix-net \
--restart unless-stopped \
-p 10050:10050 \
-e ZBX_SERVER_HOST=zabbix-server \
-e ZBX_HOSTNAME=$(hostname) \
-e ZBX_SERVER_PORT=10051 \
-e ZBX_METADATA="Linux" \
zabbix/zabbix-agent:ubuntu-7.0-latest
3.6 可选:启动Zabbix Java Gateway(Java应用监控)
用于监控 JVM、Tomcat、SpringBoot 等 Java 应用;启用后需重启 Zabbix Server 并增加 ZBX_JAVAGATEWAY=zabbix-java-gateway 参数。
docker run -d \
--name zabbix-java-gateway \
--network zabbix-net \
--restart unless-stopped \
zabbix/zabbix-java-gateway:ubuntu-7.0-latest
3.7 前端初始化配置
-
浏览器访问:
http://服务器IP -
环境检测:PHP版本、扩展、权限自动通过,无需手动配置
-
数据库配置参数:
-
数据库主机:
mysql-zabbix -
数据库名称:
zabbix -
用户名:
zabbix -
密码:
Zabbix@123456
-
-
完成安装,默认账号密码:Admin / zabbix,登录后立即修改默认密码。
四、方案二:Docker Compose编排部署(生产推荐)
统一管理所有组件,通过健康检查+依赖控制启动顺序,规避手动部署顺序错误问题。
4.1 目录规划
mkdir -p /opt/zabbix-compose
cd /opt/zabbix-compose
4.2 完整docker-compose.yml配置(生产稳定版)
version: '3.8'
networks:
zabbix-net:
driver: bridge
ipam:
config:
- subnet: 172.20.0.0/16
volumes:
mysql-data:
zabbix-server-data:
services:
mysql:
image: mysql:8.0
container_name: mysql-zabbix
restart: unless-stopped
networks:
- zabbix-net
ports:
- "3306:3306"
volumes:
- mysql-data:/var/lib/mysql
- /etc/localtime:/etc/localtime:ro
environment:
MYSQL_DATABASE: zabbix
MYSQL_USER: zabbix
MYSQL_PASSWORD: Zabbix@123456
MYSQL_ROOT_PASSWORD: Root@123456
command:
- --character-set-server=utf8mb4
- --collation-server=utf8mb4_bin
- --default-authentication-plugin=mysql_native_password
- --log_bin_trust_function_creators=1
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u", "root", "-pRoot@123456"]
interval: 10s
timeout: 5s
retries: 5
zabbix-java-gateway:
image: zabbix/zabbix-java-gateway:ubuntu-7.0-latest
container_name: zabbix-java-gateway
restart: unless-stopped
networks:
- zabbix-net
depends_on:
- mysql
zabbix-server:
image: zabbix/zabbix-server-mysql:ubuntu-7.0-latest
container_name: zabbix-server
restart: unless-stopped
networks:
- zabbix-net
ports:
- "10051:10051"
volumes:
- zabbix-server-data:/var/lib/zabbix
- /etc/localtime:/etc/localtime:ro
environment:
DB_SERVER_HOST: mysql
MYSQL_DATABASE: zabbix
MYSQL_USER: zabbix
MYSQL_PASSWORD: Zabbix@123456
ZBX_JAVAGATEWAY: zabbix-java-gateway
depends_on:
mysql:
condition: service_healthy
zabbix-web:
image: zabbix/zabbix-web-nginx-mysql:ubuntu-7.0-latest
container_name: zabbix-web
restart: unless-stopped
networks:
- zabbix-net
ports:
- "80:8080"
volumes:
- /etc/localtime:/etc/localtime:ro
environment:
ZBX_SERVER_HOST: zabbix-server
DB_SERVER_HOST: mysql
MYSQL_DATABASE: zabbix
MYSQL_USER: zabbix
MYSQL_PASSWORD: Zabbix@123456
PHP_TZ: Asia/Shanghai
depends_on:
- zabbix-server
zabbix-agent:
image: zabbix/zabbix-agent:ubuntu-7.0-latest
container_name: zabbix-agent
restart: unless-stopped
networks:
- zabbix-net
ports:
- "10050:10050"
environment:
ZBX_HOSTNAME: zabbix-server
ZBX_SERVER_HOST: zabbix-server
ZBX_SERVER_PORT: 10051
4.3 Compose常用运维命令
# 后台启动所有服务
docker compose up -d
# 查看组件运行状态
docker compose ps
# 查看全局实时日志
docker compose logs -f
# 停止服务(保留数据卷,数据不丢失)
docker compose down
# 重启单个组件
docker compose restart zabbix-server
# 查看单个组件日志
docker compose logs -f zabbix-server
Web访问、初始化配置与单组件部署一致:http://服务器IP
五、版本升级实战:Zabbix 7.0 → 7.2(平滑无损升级)
Zabbix 7.x 小版本向前兼容,数据库自动迁移,升级全程不中断 MySQL,保留所有配置与历史数据。
5.1 升级前置硬性要求(必做)
-
完成MySQL全量数据备份(唯一回滚保障)
-
确认MySQL已开启
log_bin_trust_function_creators=ON -
关闭HA集群相关配置,避免冲突
-
升级过程禁止停止MySQL容器
5.1.1 数据备份操作
# 全量备份(包含存储过程、触发器、函数)
docker exec mysql-zabbix mysqldump -uzabbix -pZabbix@123456 \
--single-transaction --routines --triggers zabbix > zabbix_db_backup_$(date +%Y%m%d_%H%M%S).sql
# 备份Compose配置文件
cp /opt/zabbix-compose/docker-compose.yml /opt/zabbix-compose/docker-compose.yml.bak
5.1.2 MySQL参数校验
docker exec mysql-zabbix mysql -uroot -pRoot@123456 -e "SHOW VARIABLES LIKE 'log_bin_trust_function_creators';"
输出 ON 则满足升级条件。
5.2 Docker Compose环境升级步骤
5.2.1 停止业务组件(保留MySQL)
cd /opt/zabbix-compose
docker compose stop zabbix-web zabbix-server zabbix-java-gateway zabbix-agent
5.2.2 修改镜像标签
Zabbix 7.2 提供固定小版本标签,选用官方稳定版 ubuntu-7.2.5,MySQL 标签保持 mysql:8.0 不变。 修改 docker-compose.yml 中所有 Zabbix 镜像标签:
zabbix-java-gateway:
image: zabbix/zabbix-java-gateway:ubuntu-7.2.5
zabbix-server:
image: zabbix/zabbix-server-mysql:ubuntu-7.2.5
zabbix-web:
image: zabbix/zabbix-web-nginx-mysql:ubuntu-7.2.5
zabbix-agent:
image: zabbix/zabbix-agent:ubuntu-7.2.5
5.2.3 拉取镜像并重建容器
# 拉取7.2版本镜像
docker compose pull
# 重建容器,不依赖其他服务
docker compose up -d --no-deps --force-recreate zabbix-server zabbix-web zabbix-agent zabbix-java-gateway
5.2.4 监控升级进度
docker logs -f zabbix-server
出现 database upgrade fully completed 代表数据库升级完成。
5.2.5 升级结果验证
docker logs zabbix-server 2>&1 | grep -E "database upgrade|Starting Zabbix"
访问 Web 页面,左下角查看版本号为 7.2.x,验证监控数据、告警、主机连接正常。
5.3 独立Docker环境升级步骤
仅替换镜像标签,保留原有网络、数据卷、挂载、环境变量:
# 停止并删除旧容器
docker stop zabbix-server zabbix-web zabbix-agent zabbix-java-gateway
docker rm zabbix-server zabbix-web zabbix-agent zabbix-java-gateway
# 启动 Zabbix Server 7.2
docker run -d \
--name zabbix-server \
--network zabbix-net \
--restart unless-stopped \
-p 10051:10051 \
-v /data/zabbix/server:/var/lib/zabbix \
-v /etc/localtime:/etc/localtime:ro \
-e DB_SERVER_HOST=mysql-zabbix \
-e MYSQL_DATABASE=zabbix \
-e MYSQL_USER=zabbix \
-e MYSQL_PASSWORD=Zabbix@123456 \
-e ZBX_JAVAGATEWAY=zabbix-java-gateway \
zabbix/zabbix-server-mysql:ubuntu-7.2.5
# 启动 Web 7.2
docker run -d \
--name zabbix-web \
--network zabbix-net \
--restart unless-stopped \
-p 80:8080 \
-e ZBX_SERVER_HOST=zabbix-server \
-e DB_SERVER_HOST=mysql-zabbix \
-e MYSQL_DATABASE=zabbix \
-e MYSQL_USER=zabbix \
-e MYSQL_PASSWORD=Zabbix@123456 \
-e PHP_TZ=Asia/Shanghai \
zabbix/zabbix-web-nginx-mysql:ubuntu-7.2.5
# 启动 Agent、Java Gateway(7.2)
docker run -d \
--name zabbix-agent \
--network zabbix-net \
--restart unless-stopped \
-p 10050:10050 \
-e ZBX_SERVER_HOST=zabbix-server \
-e ZBX_HOSTNAME=$(hostname) \
-e ZBX_SERVER_PORT=10051 \
zabbix/zabbix-agent:ubuntu-7.2.5
docker run -d \
--name zabbix-java-gateway \
--network zabbix-net \
--restart unless-stopped \
zabbix/zabbix-java-gateway:ubuntu-7.2.5
5.4 升级失败快速回滚方案
注意:Zabbix 数据库 schema 向前不向后兼容,数据库迁移脚本执行完成后无法直接回滚旧版本,务必在升级脚本执行完毕前操作。
- 紧急停止升级
docker compose stop zabbix-server zabbix-web
- 恢复备份数据库
docker exec -i mysql-zabbix mysql -uzabbix -pZabbix@123456 zabbix < 你的备份文件.sql
- 还原镜像标签为
ubuntu-7.0-latest,重启服务
docker compose up -d
5.5 升级配置保留说明
所有业务配置(主机、监控项、模板、触发器、用户权限等)均存储在 MySQL 数据库,依托 Docker 数据卷持久化,升级后完全保留。 仅容器内自定义脚本、静态文件会随容器重建重置,不影响核心业务。
六、Zabbix 7.2 核心新特性
| 特性类别 | 具体内容 |
| 可视化增强 | 新增 Sparkline 微型趋势图表,直观展示数据波动 |
| 组件优化 | Data overview 重构为 Top items,筛选能力更强 |
| 插件调整 | Agent2 插件路径变更,配置管理更规范 |
| 生态裁剪 | 彻底移除 Oracle 数据库支持 |
| API 变更 | 废弃 auth 属性,认证方式需同步适配 |
七、常见问题排错手册
| 故障现象 | 根因分析 | 解决方案 |
| Server 反复重启,提示数据表不存在 | MySQL 未开启 log_bin_trust_function_creators |
重启MySQL容器并添加对应启动参数,清空脏数据重新初始化 |
| 页面白屏/504 超时 | Zabbix Server 未完成数据库初始化 | 查看 Server 日志,等待初始化完成 |
| 页面时间慢8小时 | 时区未同步 | 配置 PHP_TZ=Asia/Shanghai,挂载 /etc/localtime |
| MySQL 连接认证失败 | MySQL8.0 密码插件不兼容 | 添加 --default-authentication-plugin=mysql_native_password |
| 外网无法访问 80 端口 | 防火墙未放行 | sudo ufw allow 80/tcp |
| 拉取镜像提示 manifest unknown | 使用了不存在的虚构标签 | 替换为官方真实标签:ubuntu-7.0-latest / ubuntu-7.2.5 |
八、生产运维拓展
8.1 MySQL定时自动备份方案
结合 crontab 实现每日自动备份,无锁备份不影响业务:
# 手动备份示例
mkdir -p /backup
docker exec mysql-zabbix mysqldump -uzabbix -pZabbix@123456 \
--single-transaction --routines --triggers zabbix > /backup/zabbix_$(date +%Y%m%d).sql
8.2 Web端HTTPS加密访问配置
-
准备 SSL 证书(crt/key),存放至
/opt/zabbix-compose/ssl -
配置容器端口映射与证书目录挂载
-
自定义 Nginx 配置文件,开启 HTTPS 监听

浙公网安备 33010602011771号