5 从容器安装
概述
本节介绍如何使用 Docker 或 Docker Compose 部署 Zabbix。
Zabbix 官方提供:
- 每个 Zabbix 组件的独立 Docker 镜像,以便 run 为便携且自包含的容器。
- Compose 文件用于在 Docker 中定义和运行多容器 Zabbix 组件。
从 Zabbix 6.0 开始,安装期间需要创建确定性触发器。 如果 MySQL/mariadb 启用了二进制日志记录,则需要超级用户权限或设置变量/配置参数 log_bin_trust_function_creators = 1。有关设置该变量的说明,请参见 mysqlmariadb。 请注意,如果从控制台执行,该变量仅临时设置,在 Docker 重启后将失效。 在这种情况下,请保持 SQL 服务运行,仅通过运行 'docker compose down zabbix-server' 然后 'docker compose up -d zabbix-server' 停止 zabbix-server 服务。 或者,您可以在配置文件中设置此变量。
源文件
Docker file 源代码存储在 GitHub 上的 Zabbix official repository 中, 您可以在那里查看最新的 file 变更,或者派生项目以创建自己的镜像。
Docker
Zabbix提供基于多种操作系统基础镜像构建的镜像。要get特定Zabbix组件支持的基础操作系统镜像列表,请参阅Docker Hub中该组件的描述。所有Zabbix镜像都配置为在基础镜像更新时自动重建最新镜像。
安装
要getZabbix组件镜像,run:
docker pull zabbix/zabbix-server-mysql
将zabbix/zabbix-server-mysql替换为所需的docker仓库名称。
此命令将拉取基于Alpine Linux操作系统的最新稳定版Zabbix组件version。您可以在仓库名称后附加标签来get基于其他操作系统或特定Zabbix主/次版本的version镜像。
Docker Hub中提供以下仓库:
| 组件 | Docker仓库 | |
|---|---|---|
| Zabbix agent | zabbix/zabbix-agent | |
| Zabbix server | ||
| 支持MySQL | zabbix/zabbix-server-mysql | |
| 支持PostgreSQL | zabbix/zabbix-server-pgsql | |
| Zabbix网页界面 | ||
| 基于Apache2网页服务器并支持MySQL | zabbix/zabbix-web-apache-mysql | |
| 基于Apache2网页服务器并支持PostgreSQL | zabbix/zabbix-web-apache-pgsql | |
| 基于nginx网页服务器并支持MySQL | zabbix/zabbix-web-nginx-mysql | |
| 基于nginx网页服务器并支持PostgreSQL | zabbix/zabbix-web-nginx-pgsql | |
| Zabbix proxy | ||
| 支持SQLite3 | zabbix/zabbix-proxy-sqlite3 | |
| 支持MySQL | zabbix/zabbix-proxy-mysql | |
| Zabbix Java网关 | zabbix/zabbix-java-gateway | |
SNMP trap支持功能通过独立仓库zabbix/zabbix-snmptraps提供。该仓库可与Zabbix server和Zabbix proxy关联使用。
标签
官方 Zabbix 组件镜像可能包含以下标签:
| 标签 | 描述 | 示例 |
|---|---|---|
| 最新版本 | 基于 Alpine Linux 镜像的 Zabbix 组件的最新稳定 version。 | zabbix-agent:latest |
| <OS>-trunk | Zabbix version 的最新夜间构建版本,该版本目前正在特定操作系统上开发。 <OS> - 基础操作系统。支持的值: alpine - Alpine Linux; ltsc2019 - Windows 10 LTSC 2019(仅限 agent); ol - Oracle Linux; ltsc2022 - Windows 11 LTSC 2022(仅限 agent); ubuntu - Ubuntu |
zabbix-agent:ubuntu-trunk |
| <OS>-latest | 特定操作系统上最新稳定版的 Zabbix 组件 version。 <OS> - 基础操作系统。支持的值: alpine - Alpine Linux; ltsc2019 - Windows 10 LTSC 2019(仅限 agent); ol - Oracle Linux; ltsc2022 - Windows 11 LTSC 2022(仅限 agent); ubuntu - Ubuntu |
zabbix-agent:ol-latest |
| <OS>-X.X-latest | 特定主要 version 和操作系统的 Zabbix 组件的最新次要 version。 <OS> - 基础操作系统。支持的值: alpine - Alpine Linux; ltsc2019 - Windows 10 LTSC 2019(仅限 agent); ol - Oracle Linux; ltsc2022 - Windows 11 LTSC 2022(仅限 agent); ubuntu - Ubuntu X.X - 主要 Zabbix version(例如 6.0、7.0、7.2)。 |
zabbix-agent:alpine-7.0-latest |
| <OS>-X.X.* | Zabbix 组件特定主版本 version 和操作系统的最新次版本 version。 <OS> - 基础操作系统。支持的值: alpine - Alpine Linux; ltsc2019 - Windows 10 LTSC 2019(仅限 agent); ol - Oracle Linux; ltsc2022 - Windows 11 LTSC 2022(仅限 agent); ubuntu - Ubuntu X.X - Zabbix 主版本 version(例如 6.0、7.0、7.2)。 * - Zabbix 次版本 version |
zabbix-agent:alpine-7.0.1 |
Docker Compose
或者,可以使用Docker Compose插件安装Zabbix。 用于定义和运行多容器Zabbix组件的Compose文件 可在GitHub上的官方Zabbix Docker repository中找到。
官方Zabbix compose文件支持Docker Compose的version 3版本。
这些compose文件作为示例提供;它们是功能冗余的。 例如,它们包含同时支持MySQL和SQLite3的proxies。
要获取Zabbix提供的Docker compose文件,请克隆仓库:
git clone https://github.com/zabbix/zabbix-docker.git
切换到所需的version:
git checkout 7.0
Compose配置文件和create并启动容器:
docker compose -f ./docker-compose_v3_alpine_mysql_latest.yaml up
将上述命令中的docker-compose_v3_alpine_mysql_latest.yaml替换为所需的配置file。
以下是可用的选项:
| 文件名 | 描述 |
|---|---|
docker-compose_v3_alpine_mysql_latest.yaml |
该compose file在Alpine Linux上运行支持MySQL数据库的最新version Zabbix 7.0组件。 |
docker-compose_v3_alpine_mysql_local.yaml |
该compose file本地构建支持MySQL数据库的最新version Zabbix 7.0,并在Alpine Linux上运行Zabbix组件。 |
docker-compose_v3_alpine_pgsql_latest.yaml |
该compose file在Alpine Linux上运行支持PostgreSQL数据库的最新version Zabbix 7.0组件。 |
docker-compose_v3_alpine_pgsql_local.yaml |
该compose file本地构建支持PostgreSQL数据库的最新version Zabbix 7.0,并在Alpine Linux上运行Zabbix组件。 |
docker-compose_v3_ol_mysql_latest.yaml |
该compose file在Oracle Linux上运行支持MySQL数据库的最新version Zabbix 7.0组件。 |
docker-compose_v3_ol_mysql_local.yaml |
该compose file本地构建支持MySQL数据库的最新version Zabbix 7.0,并在Oracle Linux上运行Zabbix组件。 |
docker-compose_v3_ol_pgsql_latest.yaml |
该compose file在Oracle Linux上运行支持PostgreSQL数据库的最新version Zabbix 7.0组件。 |
docker-compose_v3_ol_pgsql_local.yaml |
该compose file本地构建支持PostgreSQL数据库的最新version Zabbix 7.0,并在Oracle Linux上运行Zabbix组件。 |
docker-compose_v3_ubuntu_mysql_latest.yaml |
该compose file在Ubuntu 20.04上运行支持MySQL数据库的最新version Zabbix 7.0组件。 |
docker-compose_v3_ubuntu_mysql_local.yaml |
该compose file本地构建支持MySQL数据库的最新version Zabbix 7.0,并在Ubuntu 20.04上运行Zabbix组件。 |
docker-compose_v3_ubuntu_pgsql_latest.yaml |
该compose file在Ubuntu 20.04上运行支持PostgreSQL数据库的最新version Zabbix 7.0组件。 |
docker-compose_v3_ubuntu_pgsql_local.yaml |
该compose file本地构建支持PostgreSQL数据库的最新version Zabbix 7.0,并在Ubuntu 20.04上运行Zabbix组件。 |
环境变量
变量文件具有以下命名结构:.env_<type of component>,并位于 env_vars directory 中。
有关变量命名和可用选项的详细信息,请参阅环境变量。
卷
镜像允许使用以下挂载点来挂载卷:
| 卷 | 描述 | |
|---|---|---|
| Zabbix agent | ||
| /etc/zabbix/zabbix_agentd.d | 该卷允许包含 *.conf 文件,并通过 UserParameter 功能扩展 Zabbix agent |
|
| /var/lib/zabbix/modules | 该卷允许加载额外模块,并通过 LoadModule 功能扩展 Zabbix agent | |
| /var/lib/zabbix/enc | 该卷用于存储 TLS 相关文件。这些 file 名称通过 ZBX_TLSCAFILE、ZBX_TLSCRLFILE、ZBX_TLSKEY_FILE 和 ZBX_TLSPSKFILE 环境变量指定 |
|
| Zabbix server | ||
| /usr/lib/zabbix/alertscripts | 该卷用于自定义告警脚本。它是 zabbix_server.conf 中的 AlertScriptsPath 参数 |
|
| /usr/lib/zabbix/externalscripts | 该卷被 external checks 使用。它是 zabbix_server.conf 中的 ExternalScripts 参数 |
|
| /var/lib/zabbix/modules | 该卷允许加载额外模块,并通过 LoadModule 功能扩展 Zabbix server | |
| /var/lib/zabbix/enc | 该卷用于存储 TLS 相关文件。这些 file 名称通过 ZBX_TLSCAFILE、ZBX_TLSCRLFILE、ZBX_TLSKEY_FILE 和 ZBX_TLSPSKFILE 环境变量指定 |
|
| /var/lib/zabbix/ssl/certs | 该卷用作客户端认证的 SSL 客户端证书文件的存放位置。它是 zabbix_server.conf 中的 SSLCertLocation 参数 |
|
| /var/lib/zabbix/ssl/keys | 该卷用作客户端认证的 SSL 私钥文件的存放位置。它是 zabbix_server.conf 中的 SSLKeyLocation 参数 |
|
| /var/lib/zabbix/ssl/ssl_ca | 该卷用作 SSL 服务器证书验证的证书颁发机构(CA)文件的存放位置。它是 zabbix_server.conf 中的 SSLCALocation 参数 |
|
| /var/lib/zabbix/snmptraps | 该卷用作 snmptraps.log 文件的存放位置。它可以被 zabbix-snmptraps 容器共享,并在创建新的 Zabbix server 实例时通过 Docker 的 volumes_from 选项继承。通过共享卷并将 ZBX_ENABLE_SNMP_TRAPS 环境变量设置为 'true' 可启用 SNMP trap 处理功能 |
|
| /var/lib/zabbix/mibs | 该卷允许添加新的 MIB 文件。它不支持子目录,所有 MIB 文件必须放置在 /var/lib/zabbix/mibs |
|
| Zabbix proxy | ||
| /usr/lib/zabbix/externalscripts | 该卷被 external checks 使用。它是 zabbix_proxy.conf 中的 ExternalScripts 参数 |
|
| /var/lib/zabbix/db_data/ | 该卷允许将数据库文件存储在外部设备上。仅适用于使用 SQLite3 的 Zabbix proxy | |
| /var/lib/zabbix/modules | 该卷允许加载额外模块,并通过 LoadModule 功能扩展 Zabbix server | |
| /var/lib/zabbix/enc | 该卷用于存储 TLS 相关文件。这些 file 名称通过 ZBX_TLSCAFILE、ZBX_TLSCRLFILE、ZBX_TLSKEY_FILE 和 ZBX_TLSPSKFILE 环境变量指定 |
|
| /var/lib/zabbix/ssl/certs | 该卷用作客户端认证的 SSL 客户端证书文件的存放位置。它是 zabbix_proxy.conf 中的 SSLCertLocation 参数 |
|
| /var/lib/zabbix/ssl/keys | 该卷用作客户端认证的 SSL 私钥文件的存放位置。它是 zabbix_proxy.conf 中的 SSLKeyLocation 参数 |
|
| /var/lib/zabbix/ssl/ssl_ca | 该卷用作 SSL 服务器证书验证的证书颁发机构(CA)文件的存放位置。它是 zabbix_proxy.conf 中的 SSLCALocation 参数 |
|
| /var/lib/zabbix/snmptraps | 该卷用作 snmptraps.log 文件的存放位置。它可以被 zabbix-snmptraps 容器共享,并在创建新的 Zabbix server 实例时通过 Docker 的 volumes_from 选项继承。通过共享卷并将 ZBX_ENABLE_SNMP_TRAPS 环境变量设置为 'true' 可启用 SNMP trap 处理功能 |
|
| /var/lib/zabbix/mibs | 该卷允许添加新的 MIB 文件。它不支持子目录,所有 MIB 文件必须放置在 /var/lib/zabbix/mibs |
|
| 基于 Apache2 Web 服务器的 Zabbix Web 界面 | ||
| /etc/ssl/apache2 | 该卷允许为 Zabbix Web 界面启用 HTTPS。该卷必须包含为 Apache2 SSL 连接准备的两个 ssl.crt 和 ssl.key 文件 |
|
| 基于 nginx Web 服务器的 Zabbix Web 界面 | ||
| /etc/ssl/nginx | 该卷允许为 Zabbix Web 界面启用 HTTPS。该卷必须包含为 nginx SSL 连接准备的两个 ssl.crt、ssl.key 文件和 dhparam.pem |
|
| Zabbix SNMP Traps | ||
| /var/lib/zabbix/snmptraps | 该卷包含名为 snmptraps.log 的日志 file,用于接收 SNMP Traps |
|
| /var/lib/zabbix/mibs | 该卷允许添加新的 MIB 文件。它不支持子目录,所有 MIB 文件必须放置在 /var/lib/zabbix/mibs |
|
有关更多信息,请参阅 Docker Hub 上的 Zabbix 官方仓库。
Makefile
The Zabbix Dockerfiles repository also provides a Makefile as a shortcut for common Docker Compose tasks.
Instead of using the full docker compose command, you can use shorter make commands (run make help to see the available options):
# Default deployment (Zabbix server, web interface, MySQL, all on Alpine Linux)
make up
# Custom deployment (Zabbix server, web interface with custom Nginx ports, PostgreSQL, all on Ubuntu)
make up \
OS=ubuntu \
DB=pgsql \
ZABBIX_WEB_NGINX_HTTP_PORT=8282 \
ZABBIX_WEB_NGINX_HTTPS_PORT=8443
When stopping or removing containers, always specify the same database type that was deployed (e.g., make down DB=pgsql).
By default, make up starts only a minimal set of services (Zabbix server, web interface, and database).
This keeps the setup lightweight and avoids starting components that may not be needed.
To include additional components, you can use the following Compose profiles:
# Default deployment + Zabbix agent, Java gateway, web service, and SNMP traps:
make up COMPOSE_PROFILES=full
# COMPOSE_PROFILES=full + Zabbix proxy (MySQL and SQLite3):
make up COMPOSE_PROFILES=all
初始配置
下载镜像后,通过执行docker run命令启动容器,随后添加额外参数以指定所需的环境变量和/或挂载点。下方提供了一些配置示例。
在Zabbix 7.0.0-7.0.2.版本中,禁止将Zabbix以run作为PID1/容器初始化进程运行。
为实现Zabbix组件间通信,需向一个主机主机暴露部分端口,例如:10051/TCP用于Zabbix server(trapper)、10050/TCP用于Zabbix agent、162/UDP用于SNMP陷阱以及80/TCP用于Zabbix网页界面。Zabbix组件使用的默认端口完整列表详见默认端口号页面。对于Zabbix server和agent,可通过设置ZBX_LISTENPORT环境变量来修改默认端口。
示例
示例1
该示例演示如何run支持MySQL数据库的Zabbix server, 基于nginx网页服务器的Zabbix网页界面及Zabbix Java网关。
1. 创建专用于Zabbix组件容器的网络:
docker network create --subnet 172.20.0.0/16 --ip-range 172.20.240.0/20 zabbix-net
2. 启动空MySQL服务器实例:
对于MySQL 8.4+版本,应使用caching_sha2_password替代mysql_native_password。
docker run --name mysql-server -t \
-e MYSQL_DATABASE="zabbix" \
-e MYSQL_USER="zabbix" \
-e MYSQL_PASSWORD="zabbix_pwd" \
-e MYSQL_ROOT_PASSWORD="root_pwd" \
--network=zabbix-net \
--restart unless-stopped \
-d mysql:8.0-oracle \
--character-set-server=utf8 --collation-server=utf8_bin \
--default-authentication-plugin=mysql_native_password
3. 启动Zabbix Java网关实例:
docker run --name zabbix-java-gateway -t \
--network=zabbix-net \
--restart unless-stopped \
-d zabbix/zabbix-java-gateway:alpine-7.0-latest
4. 启动Zabbix server实例并链接至已创建的MySQL服务器实例:
docker run --name zabbix-server-mysql -t \
-e DB_SERVER_HOST="mysql-server" \
-e MYSQL_DATABASE="zabbix" \
-e MYSQL_USER="zabbix" \
-e MYSQL_PASSWORD="zabbix_pwd" \
-e MYSQL_ROOT_PASSWORD="root_pwd" \
-e ZBX_JAVAGATEWAY="zabbix-java-gateway" \
--network=zabbix-net \
-p 10051:10051 \
--restart unless-stopped \
-d zabbix/zabbix-server-mysql:alpine-7.0-latest
5. 启动Zabbix网页界面并链接至已创建的MySQL服务器和Zabbix server实例:
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="zabbix_pwd" \
-e MYSQL_ROOT_PASSWORD="root_pwd" \
--network=zabbix-net \
-p 80:8080 \
--restart unless-stopped \
-d zabbix/zabbix-web-nginx-mysql:alpine-7.0-latest
示例2
该示例演示如何run支持PostgreSQL数据库的Zabbix server, 基于nginx网页服务器的Zabbix网页界面及SNMP trap功能。
1. 创建专用于Zabbix组件容器的网络:
docker network create --subnet 172.20.0.0/16 --ip-range 172.20.240.0/20 zabbix-net
2. 启动空PostgreSQL服务器实例:
docker run --name postgres-server -t \
-e POSTGRES_USER="zabbix" \
-e POSTGRES_PASSWORD="zabbix_pwd" \
-e POSTGRES_DB="zabbix" \
--network=zabbix-net \
--restart unless-stopped \
-d postgres:latest
3. 启动Zabbix snmptraps实例:
docker run --name zabbix-snmptraps -t \
-v /zbx_instance/snmptraps:/var/lib/zabbix/snmptraps:rw \
-v /var/lib/zabbix/mibs:/usr/share/snmp/mibs:ro \
--network=zabbix-net \
-p 162:1162/udp \
--restart unless-stopped \
-d zabbix/zabbix-snmptraps:alpine-7.0-latest
4. 启动Zabbix server实例并链接至已创建的PostgreSQL服务器实例:
docker run --name zabbix-server-pgsql -t \
-e DB_SERVER_HOST="postgres-server" \
-e POSTGRES_USER="zabbix" \
-e POSTGRES_PASSWORD="zabbix_pwd" \
-e POSTGRES_DB="zabbix" \
-e ZBX_ENABLE_SNMP_TRAPS="true" \
--network=zabbix-net \
-p 10051:10051 \
--volumes-from zabbix-snmptraps \
--restart unless-stopped \
-d zabbix/zabbix-server-pgsql:alpine-7.0-latest
5. 启动Zabbix网页界面并链接至已创建的PostgreSQL服务器和Zabbix server实例:
docker run --name zabbix-web-nginx-pgsql -t \
-e ZBX_SERVER_HOST="zabbix-server-pgsql" \
-e DB_SERVER_HOST="postgres-server" \
-e POSTGRES_USER="zabbix" \
-e POSTGRES_PASSWORD="zabbix_pwd" \
-e POSTGRES_DB="zabbix" \
--network=zabbix-net \
-p 443:8443 \
-p 80:8080 \
-v /etc/ssl/nginx:/etc/ssl/nginx:ro \
--restart unless-stopped \
-d zabbix/zabbix-web-nginx-pgsql:alpine-7.0-latest
示例3
该示例演示如何在Red Hat 8上使用podman,
run支持MySQL数据库的Zabbix server,
基于nginx网页服务器的Zabbix网页界面及Zabbix Java网关。
1. 创建名为zabbix的新pod并暴露端口(网页界面、Zabbix server trapper):
podman pod create --name zabbix -p 80:8080 -p 10051:10051
2. (可选)在zabbix pod位置启动Zabbix agent容器:
podman run --name zabbix-agent \
-e ZBX_SERVER_HOST="127.0.0.1,localhost" \
--restart=always \
--pod=zabbix \
-d registry.connect.redhat.com/zabbix/zabbix-agent-70:latest
3. 在主机上创建./mysql/目录并启动Oracle MySQL server 8.0:
对于MySQL 8.4+版本,应使用caching_sha2_password替代mysql_native_password。
podman run --name mysql-server -t \
-e MYSQL_DATABASE="zabbix" \
-e MYSQL_USER="zabbix" \
-e MYSQL_PASSWORD="zabbix_pwd" \
-e MYSQL_ROOT_PASSWORD="root_pwd" \
-v ./mysql/:/var/lib/mysql/:Z \
--restart=always \
--pod=zabbix \
-d mysql:8.0 \
--character-set-server=utf8 --collation-server=utf8_bin \
--default-authentication-plugin=mysql_native_password
4. 启动Zabbix server容器:
podman run --name zabbix-server-mysql -t \
-e DB_SERVER_HOST="127.0.0.1" \
-e MYSQL_DATABASE="zabbix" \
-e MYSQL_USER="zabbix" \
-e MYSQL_PASSWORD="zabbix_pwd" \
-e MYSQL_ROOT_PASSWORD="root_pwd" \
-e ZBX_JAVAGATEWAY="127.0.0.1" \
--restart=always \
--pod=zabbix \
-d registry.connect.redhat.com/zabbix/zabbix-server-mysql-70
5. 启动Zabbix Java网关容器:
podman run --name zabbix-java-gateway -t \
--restart=always \
--pod=zabbix \
-d registry.connect.redhat.com/zabbix/zabbix-java-gateway-70
6. 启动Zabbix网页界面容器:
podman run --name zabbix-web-mysql -t \
-e ZBX_SERVER_HOST="127.0.0.1" \
-e DB_SERVER_HOST="127.0.0.1" \
-e MYSQL_DATABASE="zabbix" \
-e MYSQL_USER="zabbix" \
-e MYSQL_PASSWORD="zabbix_pwd" \
-e MYSQL_ROOT_PASSWORD="root_pwd" \
--restart=always \
--pod=zabbix \
-d registry.connect.redhat.com/zabbix/zabbix-web-mysql-70
Pod zabbix将80/TCP端口(HTTP)从zabbix-web-mysql容器的8080/TCP暴露至主机机器。