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 基底镜像,稳定性、兼容性更适合生产长期运行。

重要标签说明(官方真实规则)

  1. Zabbix 7.0 LTS:官方仅提供 <基底>-7.0-latest 动态标签, ubuntu2404-7.0.x 细分小版本标签;镜像底层默认基于 Ubuntu 24.04,内置 PHP 8.4,完全匹配环境要求。

  2. Zabbix 7.2 及以上版本:提供 <基底>-7.2.x 固定小版本标签,可精准锁定版本。

  3. 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 前端初始化配置

  1. 浏览器访问:http://服务器IP

  2. 环境检测:PHP版本、扩展、权限自动通过,无需手动配置

  3. 数据库配置参数:

    1. 数据库主机:mysql-zabbix

    2. 数据库名称:zabbix

    3. 用户名:zabbix

    4. 密码:Zabbix@123456

  4. 完成安装,默认账号密码: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 向前不向后兼容,数据库迁移脚本执行完成后无法直接回滚旧版本,务必在升级脚本执行完毕前操作。

  1. 紧急停止升级
docker compose stop zabbix-server zabbix-web
  1. 恢复备份数据库
docker exec -i mysql-zabbix mysql -uzabbix -pZabbix@123456 zabbix < 你的备份文件.sql
  1. 还原镜像标签为 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加密访问配置

  1. 准备 SSL 证书(crt/key),存放至 /opt/zabbix-compose/ssl

  2. 配置容器端口映射与证书目录挂载

  3. 自定义 Nginx 配置文件,开启 HTTPS 监听

posted @ 2026-06-07 12:43  kyle_7Qc  阅读(26)  评论(0)    收藏  举报