Weyu‘s blog

  • 1.创建dockernetwork
  • 2.创建MariaDB数据库的数据实体文件映射目录
  • 3.部署MariaDB容器(注意Zabbix是否支持最新版本MariaDB, 尽量使用较新的主流稳定版)
  • 4.部署zabbixServer容器
  • 5.部署zabbixWeb服务(NGINX+PHP)
  • 6.部署zabbixAgent2(主动检查)
  • 关于Agent的 主动 / 被动 检查模式
  • 7.zabbixWeb绑定Agent
  • 8.容器设置自动重启策略
  • 关键参数说明
  • 验证是否生效
  • 首页
  • 代码
  • 作品
  • 学习
  • 折腾
  • 随笔
  • 关于博主
  • 时光映像
  • 我的网盘
  • 我的音乐房
  • 文章归档
  • 友情链接

Docker方式部署MariaDB+ZabbixServer+ZabbixWeb+Agent2

  • admin
  • 2026-01-16
  • 0

这里我使用VMware内的rockyliunx9系统,使用Docker环境搭建

1.创建dockernetwork

docker network create zabbixnet

2.创建MariaDB数据库的数据实体文件映射目录

mkdir -p /data/mariadb/data

3.部署MariaDB容器(注意Zabbix是否支持最新版本MariaDB, 尽量使用较新的主流稳定版)

docker run --name mariadb -p 3306:3306 --network zabbixnet  -e MYSQL_ROOT_PASSWORD=root -v /data/mariadb/data:/var/lib/mysql -d mariadb:10.6

这里我有外部访问MariaDB数据库的需求所以我将容器的3306映射出来了,并且root密码是弱口令,生产环境不要直接拿来用

4.部署zabbixServer容器

docker run --name some-zabbix-server-mysql --network zabbixnet -p 10051:10051  -e DB_SERVER_HOST="mariadb" -e MYSQL_USER="root" -e MYSQL_PASSWORD="root" --init -d zabbix/zabbix-server-mysql:latest

我将ZabbixServer的10051端口暴露出来, 是为了模拟agent在主动检查的生产环境中其他agent也可以顺利连接到Server服务,DB_SERVER_HOS变量写入的是mariadb容器的name名称

5.部署zabbixWeb服务(NGINX+PHP)

docker run --name some-zabbix-web-nginx-mysql --network zabbixnet -e DB_SERVER_HOST="mariadb" -e MYSQL_USER="root" -e MYSQL_PASSWORD="root" -e ZBX_SERVER_HOST="some-zabbix-server-mysql" -e PHP_TZ="Asia/Shanghai" -p 8080:8080 -d zabbix/zabbix-web-nginx-mysql:7.4-centos-latest

zabbix的web服务插件主要提供一个可视化网页平台, 这里将容器的8080端口映射出来,否则zabbixWeb页面打不开

6.部署zabbixAgent2(主动检查)

docker run --name some-zabbix-agent \
  --network zabbixnet \
  -e ZBX_SERVER_HOST="some-zabbix-server-mysql" \
  -e ZBX_HOSTNAME="myrockyStestHost" \
  -v /var/run/docker.sock:/var/run/docker.sock:ro \   # 【必须】监控其他容器
  -v /dev:/dev:ro \                                    # 【必须】访问硬件设备
  -v /usr/sbin/smartctl:/usr/sbin/smartctl:ro \       # 【按需】硬盘监控
  -v /usr/bin/zabbix_get:/usr/bin/zabbix_get:ro \     # 【按需】未来可能用到
  --privileged \
  --init -d \
  zabbix/zabbix-agent2:latest

zabbixAgent是Zabbix的主要组成部分, Agent主要负责采集数据并通过 主动/被动 检查方式让Server拿到这些数据并进行可视化/数据处理/监控报警 等功能, 由于Agent在容器中运行,这里给他--privileged特权模式运行, 并且提供ZBX_HOSTNAME变量给他起个好记的标识,后面会用到, -v 将一些目录挂载进容器, 例如
-v /var/run/docker.sock:/var/run/docker.sock:ro \ 令agent具备监控管理其他docker容器的能力.
-v /usr/sbin/smartctl:/usr/sbin/smartctl:ro 和 -v /dev:/dev:ro:这两条是为 硬盘监控 准备的。它们将 smartctl 命令和硬盘设备文件挂载进容器,让 Agent 2 能调用它们去读取 S.M.A.R.T. 信息。ro 表示只读,以保证安全。

关于Agent的 主动 / 被动 检查模式

主动 (Active) 检查:Agent 主动发起连接,把数据推送到 Server。
被动 (Passive) 检查:Server 主动发起连接,向 Agent 请求数据。

主动模式:只需要 Server 端的 10051 端口 对 Agent 开放(公网可访问即可)。Agent 所在的网络环境可以非常封闭(只要能上网或者能访问到公有云 VPS 的 IP),甚至 Agent 可以是在没有公网 IP 的内网里。这是主动模式最大的优势。
被动模式:要求 所有 Agent 的 10050 端口 都要对 Server 开放。这在公网环境下几乎不可行(不安全且难以管理),通常只在同一个安全的内网环境中使用。

所以仅需要记住,主动/被动 这些称呼是基于agent方的视角来说的.

7.zabbixWeb绑定Agent

  • 登入Zabbixweb页面, 初始账号Admin 密码:zabbix
  • 点击默认 Server,菜单项选择主机
  • 模态框中,主机名称将部署agent容器时给的ZBX_HOSTNAME标识变量的值粘贴进去
  • agent那里, 选择改为DNS方式
  • Agent 容器名(NAME)填进去,然后提交表单
  • 稍等2分钟,刷新页面查看绑定状态以及错误标识是否消失
  • 可以docker logs agent容器名 查看日志丢给AI排查问题

8.容器设置自动重启策略

默认情况下,容器会在主机关机/重启后停止运行,不会再自动启动。

docker update --restart=unless-stopped mariadb
docker update --restart=unless-stopped some-zabbix-server-mysql
docker update --restart=unless-stopped some-zabbix-web-nginx-mysql
docker update --restart=unless-stopped some-zabbix-agent

关键参数说明

  • --restart=always:无论容器退出码是什么,Docker都会在重启时自动启动它。即使你手动停止了容器,Docker服务重启后它也会跟着启动。
  • --restart=unless-stopped:更推荐。行为与always基本一致,唯一的区别是:如果你手动停止了容器,那么关机重启后它不会自动启动,保持了你的“手动”意愿。

验证是否生效

docker inspect mariadb | grep -A 3 "RestartPolicy"

例如:

© 2026 Weyu‘s blog
  • {{ item.name }}
  • {{ item.name }}