Docker版Zabbix监控

📋 准备工作:检查 Docker 是否安装

 # 查看 Docker 版本,确认 Docker 已安装并运行
 docker --version
 ​
 # 查看 Docker 服务状态,确保服务是启动的
 systemctl status docker
 # 如果没启动,用下面命令启动:
 # sudo systemctl start docker

第一步:创建 Docker 专用网络

 # docker network create = 创建一个虚拟网络
 # zabbix-net = 给这个网络起个名字(可以自己取名)
 # 作用:让后面启动的多个容器可以通过这个网络互相通信
 # 就像给它们连到同一个交换机上,彼此能用容器名当 IP 地址访问
 docker network create zabbix-net
 ​
 # 验证网络是否创建成功
 docker network ls
 # 应该能看到 zabbix-net 在列表里

第二步:启动 MySQL 数据库容器

 # docker run = 创建并启动一个新容器
 # -d = 后台运行(detach 模式),不影响你继续敲命令
 # --name zabbix-mysql = 给容器起名叫 zabbix-mysql(后面 Server 要凭这个名字找到它)
 # --network zabbix-net = 让这个容器加入刚才创建的网络
 # --restart unless-stopped = 容器意外退出时自动重启(除非你手动 stop)
 # 
 # -e = environment,设置环境变量(相当于给容器内部传配置参数)
 #   MYSQL_DATABASE="zabbix" = 创建一个叫 zabbix 的数据库
 #   MYSQL_USER="zabbix" = 创建一个叫 zabbix 的数据库用户
 #   MYSQL_PASSWORD="zabbix123" = 该用户的密码(你可以改)
 #   MYSQL_ROOT_PASSWORD="root123" = root 管理员密码(你可以改)
 #
 # mysql:8.0 = 使用 MySQL 8.0 版本的镜像
 # --character-set-server=utf8mb4 = 设置数据库字符编码(支持中文)
 # --collation-server=utf8mb4_bin = 设置数据库排序规则
 docker run -d \
   --name zabbix-mysql \
   --network zabbix-net \
   --restart unless-stopped \
   -e MYSQL_DATABASE="zabbix" \
   -e MYSQL_USER="zabbix" \
   -e MYSQL_PASSWORD="zabbix123" \
   -e MYSQL_ROOT_PASSWORD="root123" \
   mysql:8.0.39 \
   --character-set-server=utf8mb4 \
   --collation-server=utf8mb4_bin
 ​
 # 查看容器是否启动成功
 docker ps
 # 应该能看到 zabbix-mysql 在运行

第三步:启动 Zabbix Server 容器(核心大脑)

 # --name zabbix-server = 容器名叫 zabbix-server
 # -p 10051:10051 = 端口映射:宿主机端口:容器端口
 #   作用:把容器内部的 10051 端口暴露出来,让外部(比如被监控的机器)能访问
 #   10051 是 Zabbix Server 监听 Agent 上报数据的默认端口
 #
 # 环境变量说明:
 #   DB_SERVER_HOST="zabbix-mysql" = 告诉 Server 数据库在哪里
 #   这里填的是 MySQL 容器的名字(因为它们在同一个网络里,可以用容器名通信)
 #   MYSQL_DATABASE/USER/PASSWORD = 填刚才创建数据库时的信息,必须一致!
 #   MYSQL_ROOT_PASSWORD = root 密码也要填,Server 需要用 root 权限初始化表结构
 #
 #   zabbix/zabbix-server-mysql:alpine-latest = 镜像名
 #   alpine 版本体积更小,适合学习使用
 docker run -d \
   --name zabbix-server \
   --network zabbix-net \
   --restart unless-stopped \
   -p 10051:10051 \
   -e DB_SERVER_HOST="zabbix-mysql" \
   -e MYSQL_DATABASE="zabbix" \
   -e MYSQL_USER="zabbix" \
   -e MYSQL_PASSWORD="zabbix123" \
   -e MYSQL_ROOT_PASSWORD="root123" \
   zabbix/zabbix-server-mysql:alpine-latest
 ​
 # 查看启动日志(确认 Server 正常连接数据库并初始化)
 docker logs zabbix-server
 # 如果看到类似 "starting Zabbix Server" 就说明成功了

第四步:启动 Zabbix Web 界面容器(网页管理后台)

 # --name zabbix-web = 容器名叫 zabbix-web
 # -p 8080:8080 = 把容器 8080 端口映射到宿主机 8080 端口
 #   等会儿浏览器访问 http://你的IP:8080 就能看到登录页面
 #
 # 环境变量说明:
 #   ZBX_SERVER_HOST="zabbix-server" = Web 界面要连接哪个 Server
 #   填 Server 容器的名字,这样 Web 和 Server 就能通信了
 #   DB_SERVER_HOST="zabbix-mysql" = Web 也要连接数据库(用来读取配置等信息)
 #   MYSQL_* = 数据库的账号密码,和之前保持一致
 #
 #   zabbix/zabbix-web-nginx-mysql:alpine-latest = 使用 Nginx 作为 Web 服务器
 docker run -d \
   --name zabbix-web \
   --network zabbix-net \
   --restart unless-stopped \
   -p 8080:8080 \
   -e ZBX_SERVER_HOST="zabbix-server" \
   -e DB_SERVER_HOST="zabbix-mysql" \
   -e MYSQL_DATABASE="zabbix" \
   -e MYSQL_USER="zabbix" \
   -e MYSQL_PASSWORD="zabbix123" \
   -e MYSQL_ROOT_PASSWORD="root123" \
   zabbix/zabbix-web-nginx-mysql:alpine-latest
 ​
 # 查看 Web 容器的日志
 docker logs zabbix-web
 # 如果看到 "Configuration OK" 或类似信息,说明 Web 配置成功

第五步:检查所有容器运行状态

 # 列出所有正在运行的容器
 docker ps
 ​
 # 理想情况下应该看到三个容器都在运行:
 # CONTAINER ID   IMAGE                                    STATUS
 # xxxx           mysql:8.0                                Up
 # xxxx           zabbix/zabbix-server-mysql:alpine-latest Up
 # xxxx           zabbix/zabbix-web-nginx-mysql:alpine-latest Up
 ​
 # 如果某个容器没启动,用 docker logs 容器名 查看错误原因

第六步:登录 Zabbix Web 界面

  1. 打开浏览器,输入地址:

     http://你的服务器IP地址:8080

    注意:如果是在本地虚拟机实验,IP 就是 127.0.0.1 或 localhost

  2. 使用默认账号登录:

    • 用户名:Admin(注意首字母大写)

    • 密码:zabbix(全部小写)

  3. 第一次登录提示:可能会看到一个“数据库初始化中”的提示,等 1-2 分钟刷新即可。

    因为 Zabbix Server 第一次启动需要创建大量数据表,耗时较长。

第七步(扩展):启动 Zabbix Agent 来监控这台服务器

 # --name zabbix-agent = 容器名叫 zabbix-agent
 # --network zabbix-net = 加入同一个网络,这样才能和 Server 通信
 #
 # 环境变量说明:
 #   ZBX_HOSTNAME="zabbix-agent" = 给这台被监控的机器起个名字(在 Web 界面会显示)
 #   ZBX_SERVER_HOST="zabbix-server" = 告诉 Agent 数据要上报给哪个 Server
 #   填 Server 容器的名字
 #
 #   zabbix/zabbix-agent:alpine-latest = Zabbix Agent 的镜像(注意是 agent,不是 agent2)
 docker run -d \
   --name zabbix-agent \
   --network zabbix-net \
   --restart unless-stopped \
   -e ZBX_HOSTNAME="zabbix-agent" \
   -e ZBX_SERVER_HOST="zabbix-server" \
   zabbix/zabbix-agent:alpine-latest
 ​
 # 查看 Agent 日志,确认连接成功
 docker logs zabbix-agent

🧹 常用清理命令(如果搞乱了想重来)

 # 查看所有容器(包括停止的)
 docker ps -a
 ​
 # 停止容器
 docker stop zabbix-web zabbix-server zabbix-mysql zabbix-agent
 ​
 # 删除容器(加 -f 强制删除)
 docker rm -f zabbix-web zabbix-server zabbix-mysql zabbix-agent
 ​
 # 删除网络
 docker network rm zabbix-net
 ​
 # 如果想彻底清理,还可以删除镜像(谨慎操作)
 # docker rmi mysql:8.0 zabbix/zabbix-server-mysql:alpine-latest ...

💡 新手常见问题排查

问题现象

可能原因

解决办法

浏览器打不开页面

防火墙没开放 8080 端口

sudo firewall-cmd --add-port=8080/tcp --permanent && sudo firewall-cmd --reload

页面提示“数据库未初始化”

Server 还在初始化

等 1-2 分钟再刷新,或 docker logs zabbix-server 查看进度

容器启动后马上退出

环境变量写错或端口冲突

docker logs 容器名 查看报错,检查密码是否一致

端口被占用

8080 或 10051 已被其他程序使用

修改 -p 映射,比如用 -p 8081:8080