以下是zabbix仓库中的一些镜像
| 组件 | 类型/说明 | Docker 仓库 |
|---|---|---|
| Zabbix agent | - | zabbix/zabbix-agent |
| Zabbix server | 支持 MySQL | zabbix/zabbix-server-mysql |
| Zabbix server | 支持 PostgreSQL | zabbix/zabbix-server-pgsql |
| Zabbix Web 界面 | 基于 Apache2 Web 服务器,支持 MySQL | zabbix/zabbix-web-apache-mysql |
| Zabbix Web 界面 | 基于 Apache2 Web 服务器,支持 PostgreSQL | zabbix/zabbix-web-apache-pgsql |
| Zabbix Web 界面 | 基于 Nginx Web 服务器,支持 MySQL | zabbix/zabbix-web-nginx-mysql |
| Zabbix Web 界面 | 基于 Nginx Web 服务器,支持 PostgreSQL | zabbix/zabbix-web-nginx-pgsql |
| Zabbix proxy | 支持 SQLite3 | zabbix/zabbix-proxy-sqlite3 |
| Zabbix proxy | 支持 MySQL | zabbix/zabbix-proxy-mysql |
| Zabbix Java 网关 | - | zabbix/zabbix-java-gateway |
docker network create \
--subnet 172.20.0.0/16 \
--ip-range 172.20.240.0/20 \
zabbix-net
一般来说是不需要开放端口的,本身就是内部之间通过容器名进行通信,开放端口是后续连接测试用的
docker pull mysql:8
-p 宿主机端口:容器端口
docker rm -f mysql-server &>/dev/null
docker run --name mysql-server -d \
--restart unless-stopped \
-e MYSQL_DATABASE="zabbix" \
-e MYSQL_USER="zabbix" \
-e MYSQL_PASSWORD="123456" \
-e MYSQL_ROOT_PASSWORD="123456" \
--network=zabbix-net \
-p 3306:3306 \
mysql:8 \
--character-set-server=utf8mb4 \
--collation-server=utf8mb4_bin
出现下面的信息正常
[root@qianyios ~]# mysql -u root -p123456 -h 127.0.0.1 -e"show databases;" mysql: [Warning] Using a password on the command line interface can be insecure. +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | sys | | zabbix | +--------------------+
docker pull postgres:17-alpine
-p 宿主机端口:容器端口
docker run --name pg-server -d \
-e POSTGRES_DB="zabbix" \
-e POSTGRES_USER="zabbix" \
-e POSTGRES_PASSWORD="123456" \
--network zabbix-net \
-p 5432:5432 \
--restart unless-stopped \
postgres:17-alpine
出现下面的信息是正常的
[root@qianyios ~]# docker exec -it pg-server psql -U zabbix -d zabbix -c "\l"
List of databases
Name | Owner | Encoding | Locale Provider | Collate | Ctype | Locale | ICU Rules | Access privileges
-----------+--------+----------+-----------------+------------+------------+--------+-----------+-------------------
postgres | zabbix | UTF8 | libc | en_US.utf8 | en_US.utf8 | | |
template0 | zabbix | UTF8 | libc | en_US.utf8 | en_US.utf8 | | | =c/zabbix +
| | | | | | | | zabbix=CTc/zabbix
template1 | zabbix | UTF8 | libc | en_US.utf8 | en_US.utf8 | | | =c/zabbix +
| | | | | | | | zabbix=CTc/zabbix
zabbix | zabbix | UTF8 | libc | en_US.utf8 | en_US.utf8 | | |
(4 rows)
docker pull zabbix/zabbix-java-gateway:alpine-7.4-latest
docker run --name zabbix-java-gateway -t \
--network=zabbix-net \
--restart unless-stopped \
-d zabbix/zabbix-java-gateway:alpine-7.4-latest
并且关联到前面的数据库实例
DB_SERVER_HOST="mysql-server" 是前面的mysql的容器名,在docker,容器名可以作为内部通信的
ZBX_JAVAGATEWAY="zabbix-java-gateway" 也是类似的意思
docker pull zabbix/zabbix-server-mysql:alpine-7.4-latest
docker rm -f zabbix-server-mysql &> /dev/null
docker run --name zabbix-server-mysql -t \
-e DB_SERVER_HOST="mysql-server" \
-e MYSQL_PORT="3306" \
-e MYSQL_DATABASE="zabbix" \
-e MYSQL_USER="zabbix" \
-e MYSQL_PASSWORD="123456" \
-e MYSQL_ROOT_PASSWORD="123456" \
-e ZBX_JAVAGATEWAY="zabbix-java-gateway" \
--network=zabbix-net \
-p 10052:10051 \
--restart unless-stopped \
-d zabbix/zabbix-server-mysql:alpine-7.4-latest
DB_SERVER_HOST="pg-server" 是前面的postgresql的容器名,在docker,容器名可以作为内部通信的
ZBX_JAVAGATEWAY="zabbix-java-gateway" 也是类似的意思
docker pull zabbix/zabbix-server-pgsql:alpine-7.4-latest
docker run --name zabbix-server-pgsql -t \
-e DB_SERVER_HOST="pg-server" \
-e POSTGRES_DB="zabbix" \
-e POSTGRES_USER="zabbix" \
-e POSTGRES_PASSWORD="123456" \
-e ZBX_JAVAGATEWAY="zabbix-java-gateway" \
--network=zabbix-net \
-p 10053:10051 \
--restart unless-stopped \
-d zabbix/zabbix-server-pgsql:alpine-7.4-latest
并将其关联到已创建的 数据库实例 和 Zabbix server(对应数据库) 实例
我这里选用的是Nginx
官方默认账号密码(固定不变)
用户名:Admin(A 大写)
密码:zabbix(全小写)
docker pull zabbix/zabbix-web-nginx-mysql:alpine-7.4-latest
docker run --name zabbix-web-nginx-mysql -t \
-e ZBX_SERVER_HOST="zabbix-server-mysql" \
-e DB_SERVER_HOST="mysql-server" \
-e MYSQL_DATABASE="zabbix" \
-e MYSQL_USER="zabbix" \
-e MYSQL_PASSWORD="123456" \
-e MYSQL_ROOT_PASSWORD="123456" \
--network=zabbix-net \
-p 81:8080 \
--restart unless-stopped \
-d zabbix/zabbix-web-nginx-mysql:alpine-7.4-latest
docker pull zabbix/zabbix-web-nginx-pgsql:alpine-7.4-latest
docker run --name zabbix-web-nginx-pgsql -t \
-e ZBX_SERVER_HOST="zabbix-server-pgsql" \
-e DB_SERVER_HOST="pg-server" \
-e POSTGRES_DB="zabbix" \
-e POSTGRES_USER="zabbix" \
-e POSTGRES_PASSWORD="123456" \
--network=zabbix-net \
-p 82:8080 \
--restart unless-stopped \
-d zabbix/zabbix-web-nginx-pgsql:alpine-7.4-latest
用来监控宿主机 + 所有容器。
一般来说只需要一个agent,但是前面我们区分两个数据库版本的web server,那我这里就举两个例子
-v 名字:容器路径 = Docker 命名数据卷(自动管理、持久化)
-v 路径:容器路径 = 宿主机目录挂载
--privileged = 自动拥有宿主机所有目录权限
-p 宿主机端口:容器端口
下面都是数据卷的方式
查看数据卷的具体位置(举例)
[root@qianyios ~]# docker volume inspect zabbix-agent-mysql-conf
[
{
"CreatedAt": "2026-05-21T12:37:07+08:00",
"Driver": "local",
"Labels": null,
"Mountpoint": "/var/lib/docker/volumes/zabbix-agent-mysql-conf/_data",
"Name": "zabbix-agent-mysql-conf",
"Options": null,
"Scope": "local"
}
]
[root@qianyios ~]#
#这样你就可以把你的conf放进去了
一般来说,都是要在对应要监控的机子部署agent,一般不会监控容器内的东西的,所以这个一般不要,只会用下面监控宿主机
docker pull zabbix/zabbix-agent:alpine-7.4-latest
# 启动 Zabbix Agent 对接 zabbix-server-mysql
docker rm -f zabbix-agent-mysql &> /dev/null
docker run --name zabbix-agent-mysql -d \
--network zabbix-net \
-p 10051:10050 \
-e ZBX_HOSTNAME="zabbix-agent-mysql" \
-e ZBX_SERVER_HOST="zabbix-server-mysql" \
-v zabbix-agent-conf:/etc/zabbix/zabbix_agentd.d \
-v zabbix-agent-modules:/var/lib/zabbix/modules \
-v zabbix-agent-enc:/var/lib/zabbix/enc \
--restart unless-stopped \
zabbix/zabbix-agent:alpine-7.4-latest
--privileged = 自动拥有宿主机所有目录权限
# 对接MySQL版server,可采集宿主机CPU/内存/磁盘/网络整机数据
docker rm -f zabbix-agent-mysql &> /dev/null
docker run --name zabbix-agent-mysql -d \
--network zabbix-net \
-p 10051:10050 \
-e ZBX_HOSTNAME="zabbix-agent-mysql" \
-e ZBX_SERVER_HOST="zabbix-server-mysql" \
-v zabbix-agent-mysql-conf:/etc/zabbix/zabbix_agentd.d \
-v zabbix-agent-mysql-modules:/var/lib/zabbix/modules \
-v zabbix-agent-mysql-enc:/var/lib/zabbix/enc \
--privileged \
--restart unless-stopped \
zabbix/zabbix-agent:alpine-7.4-latest

一般来说,都是要在对应要监控的机子部署agent,一般不会监控容器内的东西的,所以这个一般不要,只会用下面监控宿主机
docker pull zabbix/zabbix-agent:alpine-7.4-latest
# 启动 Zabbix Agent 对接 zabbix-server-pgsql
docker rm -f zabbix-agent-pgsql &> /dev/null
docker run --name zabbix-agent-pgsql -d \
--network zabbix-net \
-p 10052:10050 \
-e ZBX_HOSTNAME="zabbix-agent-pgsql" \
-e ZBX_SERVER_HOST="zabbix-server-pgsql" \
-v zabbix-agent-pg-conf:/etc/zabbix/zabbix_agentd.d \
-v zabbix-agent-pg-modules:/var/lib/zabbix/modules \
-v zabbix-agent-pg-enc:/var/lib/zabbix/enc \
--restart unless-stopped \
zabbix/zabbix-agent:alpine-7.4-latest
--privileged = 自动拥有宿主机所有目录权限
docker rm -f zabbix-agent-pgsql &> /dev/null
docker run --name zabbix-agent-pgsql -d \
--network zabbix-net \
-p 10055:10050 \
-e ZBX_HOSTNAME="zabbix-agent-pgsql" \
-e ZBX_SERVER_HOST="zabbix-server-pgsql" \
-v zabbix-agent-pg-conf:/etc/zabbix/zabbix_agentd.d \
-v zabbix-agent-pg-modules:/var/lib/zabbix/modules \
-v zabbix-agent-pg-enc:/var/lib/zabbix/enc \
--privileged \
--restart unless-stopped \
zabbix/zabbix-agent:alpine-7.4-latest

这是我在容器里面去找到的变量
docker exec -it zabbix-agent-mysql sh -c 'grep "=\${" /etc/zabbix/*.conf'
# -------------------------- 核心通信模式(主动+被动)
Server=${ZBX_PASSIVESERVERS} # 被动模式:允许的Server地址
ServerActive=${ZBX_ACTIVESERVERS} # 主动模式:上报的Server地址
StartAgents=${ZBX_STARTAGENTS} # 被动模式:监听进程数(0=关闭被动)
Hostname=${ZBX_HOSTNAME} # 主机名(主动模式必须与Web一致)
HostnameItem=${ZBX_HOSTNAMEITEM} # 自动获取主机名的监控项
Timeout=${ZBX_TIMEOUT} # 数据收发超时时间
# -------------------------- 主动模式高级参数
RefreshActiveChecks=${ZBX_REFRESHACTIVECHECKS} # 主动配置刷新间隔
BufferSend=${ZBX_BUFFERSEND} # 数据缓冲发送频率
BufferSize=${ZBX_BUFFERSIZE} # 数据缓冲最大存储大小
MaxLinesPerSecond=${ZBX_MAXLINESPERSECOND} # 每秒最大发送数据行数
HeartbeatFrequency=${ZBX_HEARTBEAT_FREQUENCY} # 主动模式心跳频率
# -------------------------- 主机自动注册(主动模式用)
HostMetadata=${ZBX_METADATA} # 主机注册元数据
HostMetadataItem=${ZBX_METADATAITEM} # 自动获取元数据
HostInterface=${ZBX_HOSTINTERFACE} # 主机注册接口
HostInterfaceItem=${ZBX_HOSTINTERFACEITEM} # 自动获取主机接口
# -------------------------- 网络监听(被动模式用)
ListenPort=${ZBX_LISTENPORT} # 监听端口(默认10050)
ListenIP=${ZBX_LISTENIP} # 监听IP地址
ListenBacklog=${ZBX_LISTENBACKLOG} # 监听队列长度
SourceIP=${ZBX_SOURCEIP} # 对外连接的源IP
# -------------------------- 安全与运行权限
AllowRoot=${ZBX_ALLOWROOT} # 是否允许root运行
User=${ZBX_USER} # 运行Agent的系统用户
# -------------------------- TLS加密配置
TLSConnect=${ZBX_TLSCONNECT} # TLS发起连接方式
TLSAccept=${ZBX_TLSACCEPT} # TLS接受连接方式
TLSCAFile=${ZBX_TLSCAFILE} # CA证书文件
TLSCRLFile=${ZBX_TLSCRLFILE} # 证书吊销列表文件
TLSServerCertIssuer=${ZBX_TLSSERVERCERTISSUER} # 服务器证书颁发者
TLSServerCertSubject=${ZBX_TLSSERVERCERTSUBJECT} # 服务器证书主题
TLSCertFile=${ZBX_TLSCERTFILE} # 本地证书文件
TLSKeyFile=${ZBX_TLSKEYFILE} # 本地私钥文件
TLSPSKIdentity=${ZBX_TLSPSKIDENTITY} # PSK身份标识
TLSPSKFile=${ZBX_TLSPSKFILE} # PSK密钥文件
TLSCipherCert=${ZBX_TLSCIPHERCERT} # 证书加密套件
TLSCipherCert13=${ZBX_TLSCIPHERCERT13} # TLS1.3证书加密套件
TLSCipherPSK=${ZBX_TLSCIPHERPSK} # PSK加密套件
TLSCipherPSK13=${ZBX_TLSCIPHERPSK13} # TLS1.3 PSK加密套件
TLSCipherAll=${ZBX_TLSCIPHERALL} # 全部加密套件
TLSCipherAll13=${ZBX_TLSCIPHERALL13} # TLS1.3全部加密套件
# -------------------------- 日志与调试
DebugLevel=${ZBX_DEBUGLEVEL} # 日志调试级别
LogRemoteCommands=${ZBX_LOGREMOTECOMMANDS} # 是否记录远程执行命令
# -------------------------- 模块与自定义参数
LoadModulePath=${ZBX_LOADMODULEPATH} # 模块加载路径
UnsafeUserParameters=${ZBX_UNSAFEUSERPARAMETERS} # 允许不安全自定义参数
UserParameterDir=${ZBX_USERPARAMETERDIR} # 用户自定义参数目录
错误信息