手把手教你使用Docker部署Zabbix 7 LTS

0 阅读5分钟

一、部署背景与核心组件说明

Zabbix是一款企业级开源监控解决方案,能够实时监控服务器、网络设备、应用程序等IT资源的状态,并提供告警、数据可视化等核心能力。在Docker环境下部署Zabbix,可大幅简化环境依赖管理,提升部署效率。

Zabbix 的核心运行依赖以下三类组件,缺一不可:

组件类型作用说明
数据库(MySQL)存储 Zabbix 的配置数据、监控指标、告警日志等核心数据
Zabbix ServerZabbix 核心服务,负责收集 Agent 上报的监控数据、处理告警规则、与数据库交互
Zabbix Web可视化管理界面,提供配置管理、监控看板、报表查看等操作入口

二、环境准备

  1. 前置条件 已安装 Docker 环境(建议 Docker 20.10+) 服务器资源:至少 2 核 4G 内存,确保容器运行稳定 网络:开放 80(Web 访问)、3306(数据库)、10051(Zabbix Server)端口
  2. 镜像拉取(标准化管理) 为保证镜像来源稳定,优先从渡渡鸟镜像源拉取,并标准化镜像标签:
1. 拉取MySQL 8.4.2镜像
docker pull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/mysql:8.4.2
docker tag swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/mysql:8.4.2 docker.io/mysql:8.4.2

2. 拉取Zabbix Server镜像
docker pull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/zabbix/zabbix-server-mysql:alpine-7.2-latest
docker tag swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/zabbix/zabbix-server-mysql:alpine-7.2-latest docker.io/zabbix/zabbix-server-mysql:alpine-7.2-latest

3. 拉取Zabbix Web镜像
docker pull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/zabbix/zabbix-web-nginx-mysql:ubuntu-7.2-latest
docker tag swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/zabbix/zabbix-web-nginx-mysql:ubuntu-7.2-latest docker.io/zabbix/zabbix-web-nginx-mysql:ubuntu-7.2-latest

验证镜像拉取结果
docker images

检查结果:

image.png

三、分步部署 Zabbix

1. 创建专属 Docker 网络

为 Zabbix 组件创建独立网络,避免端口冲突,保证容器间通信隔离:

[root@Ops docker-images]# docker network create --subnet 172.20.0.0/16 --ip-range 172.20.240.0/20 zabbix-net
4394a41c14ff095dd3f833669623e3d6674870e69e9f0f163de04411d126c390

2. 启动 MySQL 数据库

Zabbix 对 MySQL 有版本要求(8.0+),需提前配置数据库、用户及权限:

docker run -itd \
  --name=mysql \
  -e MYSQL_DATABASE="zabbix" \          # 预创建Zabbix数据库
  -e MYSQL_USER="zabbix" \              # 预创建Zabbix专用用户
  -e MYSQL_PASSWORD="P@ssw0rd" \        # Zabbix用户密码
  -e MYSQL_ROOT_PASSWORD="P@ssw0rd" \   # MySQL root密码
  --restart=always \                    # 开机自启
  --network=zabbix-net \                # 加入Zabbix专属网络
  -p 3306:3306 \                        # 映射端口到宿主机
  -v mysql_data:/var/lib/mysql \        # 挂载数据卷,防止数据丢失
  swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/mysql:8.4.2

# 验证MySQL启动状态
docker ps -a | grep mysql
# 可选:进入容器验证数据库创建
docker exec -it mysql mysql -uroot -pP@ssw0rd -e "show databases;" | grep zabbix

然后docker ps -a确认启动

image.png

3. 启动 Zabbix Server

注意:需等待 MySQL 完全启动(约 10 秒)后再启动 Server,避免连接失败: 启动zabbix Web

docker run -itd \
  --name=mysql \
  -e MYSQL_DATABASE="zabbix" \          # 预创建Zabbix数据库
  -e MYSQL_USER="zabbix" \              # 预创建Zabbix专用用户
  -e MYSQL_PASSWORD="P@ssw0rd" \        # Zabbix用户密码
  -e MYSQL_ROOT_PASSWORD="P@ssw0rd" \   # MySQL root密码
  --restart=always \                    # 开机自启
  --network=zabbix-net \                # 加入Zabbix专属网络
  -p 3306:3306 \                        # 映射端口到宿主机
  -v mysql_data:/var/lib/mysql \        # 挂载数据卷,防止数据丢失
  swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/mysql:8.4.2

# 验证MySQL启动状态
docker ps -a | grep mysql
# 可选:进入容器验证数据库创建
docker exec -it mysql mysql -uroot -pP@ssw0rd -e "show databases;" | grep zabbix

然后docker ps -a确认启动 image.png

4. 启动 Zabbix Web 界面

Zabbix Web 依赖 Nginx+PHP,需配置时区、Server 地址等关键参数:

# 等待MySQL初始化完成
sleep 30

docker run -itd \
  --name=zabbix-server \
  -v zabbix_server:/etc/zabbix \        # 挂载配置卷,方便修改配置
  -e DB_SERVER_HOST="mysql" \           # 数据库容器名(同网络下可直接访问)
  -e MYSQL_DATABASE="zabbix" \          # 对应MySQL创建的数据库
  -e MYSQL_USER="zabbix" \              # 对应MySQL创建的用户
  -e MYSQL_PASSWORD="P@ssw0rd" \        # 对应MySQL用户密码
  -e MYSQL_ROOT_PASSWORD="P@ssw0rd" \   # MySQL root密码(用于初始化表结构)
  --network=zabbix-net \                # 加入Zabbix专属网络
  -p 10051:10051 \                      # Zabbix Server默认端口
  --restart=always \                    # 开机自启
  swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/zabbix/zabbix-server-mysql:alpine-7.2-latest
  
# 验证Zabbix Server启动状态
docker ps -a | grep zabbix-server
# 查看Server日志,确认无报错
docker logs zabbix-server | grep -i "started"

然后docker ps -a确认启动 image.png 服务正常,启动!

四、访问与验证

1. 登录 Zabbix Web

在浏览器访问服务器 IP(我的是192.168.0.2),使用默认账号密码登录:

  • 账号:Admin
  • 密码:zabbix

image.png image.png

2. 常见问题排查

如果Web界面显示如果出现以下情况“Zabbix Server is not running”,说明Zabbix Server出现了问题,导致后端数无法与数据库交互。 image.png 可按以下步骤排查:

  1. 检查 Server 容器日志

    docker logs zabbix-server | grep -i error
    

    常见错误:数据库连接失败(密码错误 / 网络不通)、表结构未初始化。

  2. 验证容器间网络通信

    # 从Web容器ping Server容器
    docker exec -it zabbix-web ping zabbix-server -c 3
    # 从Server容器ping MySQL容器
    docker exec -it zabbix-server ping mysql -c 3
    
  3. 重新初始化 Zabbix 数据库(若表结构缺失):

    docker exec -it zabbix-server sh -c "zcat /usr/share/zabbix-sql-scripts/mysql/server.sql.gz | mysql -h mysql -uzabbix -pP@ssw0rd zabbix"
    # 重启Server
    docker restart zabbix-server
    

五、部署后优化建议

  1. 修改默认密码:登录后立即修改 Admin 密码,避免安全风险;
  2. 持久化数据:所有容器均已挂载数据卷,定期备份数据卷(docker volume inspect查看挂载路径);
  3. 调整监控参数:根据服务器性能,修改 Zabbix Server 的StartPollers等参数,提升监控效率;
  4. 配置告警媒介:添加邮件 / 钉钉 / 微信告警,确保监控异常及时通知。

总结

  1. 核心组件:Zabbix 部署依赖 MySQL(数据库)、Zabbix Server(核心服务)、Zabbix Web(可视化界面)三大组件,且需保证容器在同一网络下通信;
  2. 关键步骤:先创建专属网络,再启动 MySQL(需挂载数据卷),等待 MySQL 初始化完成后启动 Server,最后启动 Web 并配置时区;
  3. 排错重点:Web 界面显示 Server 未运行时,优先检查 Server 日志、容器间网络连通性、数据库账号密码及表结构是否正常。