5 从容器安装

概述

本节介绍如何使用 DockerDocker 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.07.07.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.07.07.2)。

* - Zabbix 次版本 version
zabbix-agent:alpine-7.0.1

初始配置

下载镜像后,通过执行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环境变量来修改默认端口。

环境变量

所有 Zabbix 组件镜像都提供了环境变量以控制配置。 支持的环境变量列在 组件仓库 中。

这些环境变量是 Zabbix 配置文件中的选项,但命名方式不同。 例如,ZBX_LOGSLOWQUERIES 等价于 Zabbix logslowqueries 或 Zabbix logslowqueries 配置文件中的 LogSlowQueries

某些配置选项(例如 PIDFileLogType)无法更改。

以下环境变量专用于 Docker 组件,在 Zabbix 配置文件中不存在:

变量 组件 默认值 描述
DB_SERVER_HOST Server
Proxy
Web界面
MYSQL 的 mysql-server
PostgreSQL 的 postgres-server
MySQL 或 PostgreSQL 服务器的 IP 或 DNS 名称。
DB_SERVER_PORT Server
Proxy
Web界面
MYSQL 的 3306
PostgreSQL 的 5432
MySQL 或 PostgreSQL 服务器的端口。
MYSQL_USER Server
Proxy
Web界面
zabbix MySQL 数据库用户。
MYSQL_PASSWORD Server
Proxy
Web界面
zabbix MySQL 数据库密码。
MYSQL_DATABASE Server
Proxy
Web界面
Zabbix server 的 zabbix
Zabbix proxy 的 zabbix_proxy
Zabbix 数据库名称。
POSTGRES_USER Server
Web界面
zabbix PostgreSQL 数据库用户。
POSTGRES_PASSWORD Server
Web界面
zabbix PostgreSQL 数据库密码。
POSTGRES_DB Server
Web界面
Zabbix server 的 zabbix
Zabbix proxy 的 zabbix_proxy
Zabbix 数据库名称。
PHP_TZ Web界面 Europe/Riga PHP 格式的时间区。支持的时区完整列表请见 php.net
ZBX_SERVER_NAME Web界面 Zabbix Docker Web界面右上Top角显示的Zabbix安装名称。
ZBX_JAVAGATEWAY_ENABLE Server
Proxy
false 启用与 Zabbix Java gateway 的通信以收集 Java 相关检查项。
ZBX_ENABLE_SNMP_TRAPS Server
Proxy
false 启用 SNMP trap 功能。需要 zabbix-snmptraps 实例以及共享卷 /var/lib/zabbix/snmptraps 到 Zabbix server 或 Zabbix proxy。

镜像允许使用以下挂载点来挂载卷:

描述
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_TLSCAFILEZBX_TLSCRLFILEZBX_TLSKEY_FILEZBX_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_TLSCAFILEZBX_TLSCRLFILEZBX_TLSKEY_FILEZBX_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_TLSCAFILEZBX_TLSCRLFILEZBX_TLSKEY_FILEZBX_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.crtssl.key 文件
基于 nginx Web 服务器的 Zabbix Web 界面
/etc/ssl/nginx 该卷允许为 Zabbix Web 界面启用 HTTPS。该卷必须包含为 nginx SSL 连接准备的两个 ssl.crtssl.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 官方仓库。

示例

示例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暴露至主机机器。

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组件。

存储

组合文件被配置为支持在 一个主机 机器上的本地存储。当你使用 compose 文件 run Zabbix 组件时,Docker Compose 将会在 compose file 所在的文件夹中 create 一个 zbx_env 目录。 该目录将包含与 Volumes 章节中描述的相同结构以及用于数据库存储的目录。

此外,还有以只读模式挂载的卷用于 /etc/localtime/etc/timezone 文件。

环境变量

变量文件具有以下命名结构:.env_<type of component>,并位于 env_vars directory 中。 有关变量命名和可用选项的详细信息,请参阅环境变量

示例

示例1

git checkout 7.0
       docker compose -f ./docker-compose_v3_alpine_mysql_latest.yaml up -d

该命令将下载各Zabbix 7.0组件的最新镜像并以分离模式run它们。

切勿忘记从github.com官方Zabbix仓库下载包含compose文件的.env_<type of component>文件。

示例2

git checkout 7.0
       docker compose -f ./docker-compose_v3_ubuntu_mysql_local.yaml up -d

该命令将下载Ubuntu 24.04 (noble)基础镜像,然后在本地构建Zabbix 7.0组件并以分离模式run它们。