5 从容器安装
Overview
This page describes how to deploy Zabbix using Docker or Docker Compose.
Docker Compose is the quickest way to deploy Zabbix. It reads a configuration file and automatically starts all the containers that make up a complete Zabbix setup, in the correct order.
Docker (manual deployment) achieves the same result by deploying each component step by step, which may suit users already managing an existing Docker environment.
Since Zabbix 6.0, deterministic triggers need to be created during the installation.
If binary logging is enabled for MySQL/MariaDB, this requires superuser privileges or setting the variable/configuration parameter log_bin_trust_function_creators = 1.
See Database creation scripts for instructions how to set the variable.
Note that if executing from a console, the variable will only be set temporarily and will be dropped when a Docker is restarted.
In this case, keep your SQL service running, only stop zabbix-server service by running docker compose down zabbix-server and then docker compose up -d zabbix-server.
Alternatively, you can set this variable in the configuration file.
Prerequisites
Before you begin, make sure Docker is installed on your system. If it is not, follow the Docker installation guide.
Some Zabbix components require specific ports to be open on the host running Docker (e.g., 10051/TCP for Zabbix server, 162/UDP for SNMP traps).
See Requirements for a full list of ports used by Zabbix components.
For Zabbix server and agent, the default port can be changed by setting the ZBX_LISTENPORT environment variable on the respective container.
结构
所有Zabbix组件均可在以下Docker仓库中获取:
- Zabbix agent - zabbix/zabbix-agent
- Zabbix server
- 支持MySQL数据库的Zabbix server - zabbix/zabbix-server-mysql
- 支持PostgreSQL数据库的Zabbix server - zabbix/zabbix-server-pgsql
- Zabbix web-interface
- 基于Apache2 web服务器且支持MySQL数据库的Zabbix web-interface - zabbix/zabbix-web-apache-mysql
- 基于Apache2 web服务器且支持PostgreSQL数据库的Zabbix web-interface - zabbix/zabbix-web-apache-pgsql
- 基于nginx web服务器且支持MySQL数据库的Zabbix web-interface - zabbix/zabbix-web-nginx-mysql
- 基于nginx web服务器且支持PostgreSQL数据库的Zabbix web-interface - zabbix/zabbix-web-nginx-pgsql
- Zabbix proxy
- 支持SQLite3数据库的Zabbix proxy - zabbix/zabbix-proxy-sqlite3
- 支持MySQL数据库的Zabbix proxy - zabbix/zabbix-proxy-mysql
-
Zabbix Java Gateway -
此外还提供SNMP trap支持。该功能作为附加仓库 (zabbix/zabbix-snmptraps) 仅基于Ubuntu Trusty提供。可与Zabbix server和 Zabbix proxy进行关联。
版本
每个Zabbix组件仓库包含以下标签:
latest- 基于Alpine Linux镜像的Zabbix组件最新稳定versionalpine-latest- 基于Alpine Linux镜像的Zabbix组件最新稳定versionubuntu-latest- 基于Ubuntu镜像的Zabbix组件最新稳定versionalpine-6.0-latest- 基于Alpine Linux镜像的Zabbix 6.0组件最新次要versionubuntu-6.0-latest- 基于Ubuntu镜像的Zabbix 6.0组件最新次要versionalpine-6.0.*- 基于Alpine Linux镜像的Zabbix 6.0组件不同次要版本,其中*表示Zabbix组件的次要versionubuntu-6.0.*- 基于Ubuntu镜像的Zabbix 6.0组件不同次要版本,其中*表示Zabbix组件的次要version
Docker Compose
Zabbix 还提供了用于在Docker中定义和运行多容器Zabbix组件的compose文件。这些compose文件可在github.com上的Zabbix官方docker仓库获取: https://github.com/zabbix/zabbix-docker。这些compose文件作为示例提供,它们是经过重载的。例如,它们包含同时支持MySQL和SQLite3的proxies。
存在几种不同版本的compose文件:
| 文件名 | 描述 |
|---|---|
docker-compose_v3_alpine_mysql_latest.yaml |
该composefile在Alpine Linux上运行支持MySQL数据库的Zabbix 6.0组件最新version。 |
docker-compose_v3_alpine_mysql_local.yaml |
该composefile本地构建Zabbix 6.0最新version并在Alpine Linux上运行支持MySQL数据库的Zabbix组件。 |
docker-compose_v3_alpine_pgsql_latest.yaml |
该composefile在Alpine Linux上运行支持PostgreSQL数据库的Zabbix 6.0组件最新version。 |
docker-compose_v3_alpine_pgsql_local.yaml |
该composefile本地构建Zabbix 6.0最新version并在Alpine Linux上运行支持PostgreSQL数据库的Zabbix组件。 |
docker-compose_v3_centos_mysql_latest.yaml |
该composefile在CentOS 8上运行支持MySQL数据库的Zabbix 6.0组件最新version。 |
docker-compose_v3_centos_mysql_local.yaml |
该composefile本地构建Zabbix 6.0最新version并在CentOS 8上运行支持MySQL数据库的Zabbix组件。 |
docker-compose_v3_centos_pgsql_latest.yaml |
该composefile在CentOS 8上运行支持PostgreSQL数据库的Zabbix 6.0组件最新version。 |
docker-compose_v3_centos_pgsql_local.yaml |
该composefile本地构建Zabbix 6.0最新version并在CentOS 8上运行支持PostgreSQL数据库的Zabbix组件。 |
docker-compose_v3_ubuntu_mysql_latest.yaml |
该composefile在Ubuntu 20.04上运行支持MySQL数据库的Zabbix 6.0组件最新version。 |
docker-compose_v3_ubuntu_mysql_local.yaml |
该composefile本地构建Zabbix 6.0最新version并在Ubuntu 20.04上运行支持MySQL数据库的Zabbix组件。 |
docker-compose_v3_ubuntu_pgsql_latest.yaml |
该composefile在Ubuntu 20.04上运行支持PostgreSQL数据库的Zabbix 6.0组件最新version。 |
docker-compose_v3_ubuntu_pgsql_local.yaml |
该composefile本地构建Zabbix 6.0最新version并在Ubuntu 20.04上运行支持PostgreSQL数据库的Zabbix组件。 |
可用的Docker compose文件支持Docker Compose的version 3版本。
环境变量
所有Zabbix组件镜像都提供用于控制配置的环境变量。这些环境变量在每个组件仓库中均有列出。这些环境变量源自Zabbix配置文件选项,但采用不同的命名方式。例如,ZBX_LOGSLOWQUERIES等同于LogSlowQueries,后者来自Zabbix server和Zabbix proxy配置文件。
部分配置选项不允许修改。例如,PIDFile和LogType。
某些组件具有特定的环境变量,这些变量在官方Zabbix配置文件中不存在:
| 变量 | 组件 | 描述 |
|---|---|---|
DB_SERVER_HOST |
Server Proxy Web界面 |
该变量为MySQL或PostgreSQL服务器的IP或DNS名称。 默认值为MySQL的 mysql-server或PostgreSQL的postgres-server |
DB_SERVER_PORT |
Server Proxy Web界面 |
该变量为MySQL或PostgreSQL服务器的端口号。 默认值分别为'3306'或'5432'。 |
MYSQL_USER |
Server Proxy Web界面 |
MySQL数据库用户。 默认值为'zabbix'。 |
MYSQL_PASSWORD |
Server Proxy Web界面 |
MySQL数据库密码。 默认值为'zabbix'。 |
MYSQL_DATABASE |
Server Proxy Web界面 |
Zabbix数据库名称。 默认值对Zabbix server为'zabbix',对Zabbix proxy为'zabbix_proxy'。 |
POSTGRES_USER |
Server Web界面 |
PostgreSQL数据库用户。 默认值为'zabbix'。 |
POSTGRES_PASSWORD |
Server Web界面 |
PostgreSQL数据库密码。 默认值为'zabbix'。 |
POSTGRES_DB |
Server Web界面 |
Zabbix数据库名称。 默认值为'zabbix'。 |
PHP_TZ |
Web界面 | PHP格式的时区设置。支持的完整时区列表见php.net。 默认值为'Europe/Riga'。 |
ZBX_SERVER_NAME |
Web界面 | 在Web界面右上角Top显示的Zabbix安装名称。 默认值为'Zabbix Docker' |
ZBX_JAVAGATEWAY_ENABLE |
Server Proxy |
启用与Zabbix Java网关的通信以收集Java相关检查项。 默认值为"false" |
ZBX_ENABLE_SNMP_TRAPS |
Server Proxy |
启用SNMP trap功能。此功能需要zabbix-snmptraps实例以及共享卷/var/lib/zabbix/snmptraps挂载至Zabbix server或Zabbix proxy。 |
卷
这些镜像允许使用某些挂载点。这些挂载点根据Zabbix组件类型不同而有所差异:
| 卷 | 描述 |
|---|---|
| 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.logfile的存储位置。可与zabbix-snmptraps容器共享,并通过volumes_from Docker选项在创建新Zabbix server实例时继承。通过共享卷并将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.logfile的存储位置。可与zabbix-snmptraps容器共享,并通过volumes_from Docker选项在创建新Zabbix server实例时继承。通过共享卷并将ZBX_ENABLE_SNMP_TRAPS环境变量设为'true'可启用SNMP trap处理功能 |
| /var/lib/zabbix/mibs | 该卷允许添加新MIB文件。不支持子目录,所有MIB必须放在/var/lib/zabbix/mibs目录下 |
| 基于Apache2的Zabbix web界面 | |
| /etc/ssl/apache2 | 该卷允许为Zabbix web界面启用HTTPS。必须包含为Apache2 SSL连接准备的ssl.crt和ssl.key两个文件 |
| 基于nginx的Zabbix web界面 | |
| /etc/ssl/nginx | 该卷允许为Zabbix web界面启用HTTPS。必须包含为nginx SSL连接准备的ssl.crt、ssl.key文件和dhparam.pem |
| Zabbix snmptraps | |
| /var/lib/zabbix/snmptraps | 该卷包含接收SNMP trap生成的snmptraps.log日志file |
| /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不得在容器中作为PID1/初始化进程run运行。
示例
示例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服务器实例
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 \
--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-6.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-6.0-latest
Zabbix server实例向主机机器暴露10051/TCP端口(Zabbix trapper)。
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-6.0-latest
Zabbix网页界面实例向主机机器暴露80/TCP端口(HTTP)。
示例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-6.0-latest
Zabbix snmptrap实例向主机机器暴露162/UDP端口(SNMP traps)。
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-6.0-latest
Zabbix server实例向主机机器暴露10051/TCP端口(Zabbix trapper)。
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-6.0-latest
Zabbix网页界面实例向主机机器暴露443/TCP端口(HTTPS)。
目录/etc/ssl/nginx必须包含所需名称的证书。
示例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-60:latest
3. 在主机上创建./mysql/目录并启动Oracle MySQL服务器8.0:
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-60
5. 启动Zabbix Java网关容器:
podman run --name zabbix-java-gateway -t \
--restart=always \
--pod=zabbix \
-d registry.connect.redhat.com/zabbix/zabbix-java-gateway-60
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-60
Pod zabbix从zabbix-web-mysql容器的8080/TCP向主机机器暴露80/TCP端口(HTTP)。