5 Instalação a partir de containers

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.

Estrutura

Todos os componentes Zabbix estão disponíveis nos seguintes repositórios Docker:

Adicionalmente há suporte para SNMP Trap. Ele é fornecido através de repositório adicional (zabbix/zabbix-snmptraps) baseado apenas em Ubuntu Trusty. Tal solução pode ser associada com Zabbix Server e Zabbix Proxy.

Versões

Cada repositório de componentes Zabbix contém as seguintes tags:

  • latest - versão estável mais recente de um componente Zabbix baseado em imagem Alpine Linux
  • alpine-latest - versão estável mais recente de um componente Zabbix baseado em imagem Alpine Linux
  • ubuntu-latest - versão estável mais recente de um componente Zabbix baseado em imagem Ubuntu
  • alpine-5.4-latest - versão secundária (minor version) mais recente de um componente Zabbix 5.4 baseado em imagem Alpine Linux
  • ubuntu-5.4-latest - versão secundária (minor version) mais recente de um componente Zabbix 5.4 baseado em imagem Ubuntu
  • alpine-5.4.* - diferentes versões secundárias (minor versions) de um componente Zabbix 5.4 baseado em imagem Alpine Linux, onde * representa a versão secundária do componente Zabbix
  • ubuntu-5.4.* - diferentes versões secundárias (minor versions) de um componente Zabbix 5.4 baseado em imagem Ubuntu, onde * representa a versão secundária do componente Zabbix

Docker Compose

A Zabbix também fornece arquivos compose para definição e execução multi-container dos componentes Zabbix em Docker. Estes arquivos compose estão disponíveis no repositório oficial do Zabbix no github.com: https://github.com/zabbix/zabbix-docker. Estes arquivos compose estão disponíveis como exemplos, e estão sobrecarregados. Por exemplo, eles contém proxies com suporte a MySQL e SQLite3.

Há algumas versões diferentes de arquivos compose:

Nome do arquivo Descrição
docker-compose_v3_alpine_mysql_latest.yaml O arquivo compose executa a versão mais recente dos componentes do Zabbix 5.4 em Alpine Linux com suporte a MySQL.
docker-compose_v3_alpine_mysql_local.yaml O arquivo compose constrói localmente a versão mais recente do Zabbix 5.4 e executa os componentes Zabbix em Alpine Linux com suporte a MySQL.
docker-compose_v3_alpine_pgsql_latest.yaml O arquivo compose executa a versão mais recente dos componentes do Zabbix 5.4 em Alpine Linux com suporte a PostgreSQL.
docker-compose_v3_alpine_pgsql_local.yaml O arquivo compose constrói localmente a versão mais recente do Zabbix 5.4 e executa os componentes Zabbix em Alpine Linux com suporte a PostgreSQL.
docker-compose_v3_centos_mysql_latest.yaml O arquivo compose executa a versão mais recente dos componentes do Zabbix 5.4 em CentOS 8 com suporte a MySQL.
docker-compose_v3_centos_mysql_local.yaml O arquivo compose constrói localmente a versão mais recente do Zabbix 5.4 e executa os componentes Zabbix em CentOS 8 com suporte a MySQL.
docker-compose_v3_centos_pgsql_latest.yaml O arquivo compose executa a versão mais recente dos componentes do Zabbix 5.4 em CentOS 8 com suporte a PostgreSQL.
docker-compose_v3_centos_pgsql_local.yaml O arquivo compose constrói localmente a versão mais recente do Zabbix 5.4 e executa os componentes Zabbix em CentOS 8 com suporte a PostgreSQL.
docker-compose_v3_ubuntu_mysql_latest.yaml O arquivo compose executa a versão mais recente dos componentes do Zabbix 5.4 em Ubuntu 20.04 com suporte a MySQL.
docker-compose_v3_ubuntu_mysql_local.yaml O arquivo compose constrói localmente a versão mais recente do Zabbix 5.4 e executa os componentes Zabbix em Ubuntu 20.04 com suporte a MySQL.
docker-compose_v3_ubuntu_pgsql_latest.yaml O arquivo compose executa a versão mais recente dos componentes do Zabbix 5.4 em Ubuntu 20.04 com suporte a PostgreSQL.
docker-compose_v3_ubuntu_pgsql_local.yaml O arquivo compose constrói localmente a versão mais recente do Zabbix 5.4 e executa os componentes Zabbix em Ubuntu 20.04 com suporte a PostgreSQL.

Os arquivos compose disponíveis suportam a versão 3 do Docker Compose.

Variáveis de ambiente

Todas as imagens de componentes Zabbix fornecem variáveis de ambiente para controlar a configuração. Estas variáveis de ambiente estão listadas em cada repositório dos componentes. Tais variáveis são opções vindas dos arquivos de configuração do Zabbix, mas com método de nomenclatura diferenciado. Por exemplo, ZBX_LOGSLOWQUERIES é o mesmo que a opção LogSlowQueries dos arquivos de configuração do Zabbix Server e Zabbix Proxy.

Algumas opções de configuração não podem ser alteradas. Por exemplo, PIDFile and LogType.

Alguns dos componentes possuem variáveis de ambiente específicas, que não existem nos arquivos de configuração oficiais do Zabbix:

Variável Componentes Descrição
DB_SERVER_HOST Server
Proxy
Web interface
Esta variável representa o IP ou nome DNS do servidor MySQL ou PostgreSQL.
Por padrão, seu valor é mysql-server ou postgres-server para MySQL ou PostgreSQL, respectivamente.
DB_SERVER_PORT Server
Proxy
Web interface
Esta variável representa a porta do servidor MySQL ou PostgreSQL.
Por padrão, seu valor é '3306' ou '5432', respectivamente.
MYSQL_USER Server
Proxy
Web-interface
Usuário do banco de dados MySQL.
Por padrão, seu valor é 'zabbix'.
MYSQL_PASSWORD Server
Proxy
Web interface
Senha do banco de dados MySQL.
Por padrão, seu valor é 'zabbix'.
MYSQL_DATABASE Server
Proxy
Web interface
Nome do banco de dados do Zabbix.
Por padrão, seu valor é 'zabbix' para Zabbix Server e 'zabbix_proxy' para Zabbix Proxy.
POSTGRES_USER Server
Web interface
Usuário do banco de dados PostgreSQL.
Por padrão, seu valor é 'zabbix'.
POSTGRES_PASSWORD Server
Web interface
Senha do banco de dados PostgreSQL.
Por padrão, seu valor é 'zabbix'.
POSTGRES_DB Server
Web interface
Nome do banco de dados do Zabbix.
Por padrão, seu valor é 'zabbix' para Zabbix Server e 'zabbix_proxy' para Zabbix Proxy.
PHP_TZ Web-interface Timezone no formato PHP. Lista completa de timezones suportados disponível em php.net.
Por padrão, seu valor é 'Europe/Riga'.
ZBX_SERVER_NAME Web interface Nome de instalação visível no canto superior direito da interface web.
Por padrão, seu valor é 'Zabbix Docker'
ZBX_JAVAGATEWAY_ENABLE Server
Proxy
Habilita comunicação com Zabbix Java Gateway para coleta de verificações relacionadas ao Java.
Por padrão, seu valor é "false"
ZBX_ENABLE_SNMP_TRAPS Server
Proxy
Habilita a funcionalidade SNMP Trap. Requer instância zabbix-snmptraps e volume /var/lib/zabbix/snmptraps compartilhado para Zabbix Server ou Zabbix Proxy.
Volumes

As imagens permitem utilizar alguns pontos de montagem. Estes pontos de montagem são diferentes e dependem do tipo de componente Zabbix:

Volume Descrição
Zabbix Agent
/etc/zabbix/zabbix_agentd.d O volume permite incluir arquivos *.conf e estende o Zabbix Agent usando a funcionalidade UserParameter
/var/lib/zabbix/modules O volume permite carregar módulos adicionais e estende o Zabbix Agent usando a funcionalidade LoadModule
/var/lib/zabbix/enc O volume é usado para armazenar arquivos relacionados a TLS. Estes nomes de arquivo são especificados usando as variáveis de ambiente ZBX_TLSCAFILE, ZBX_TLSCRLFILE, ZBX_TLSKEY_FILE e ZBX_TLSPSKFILE
Zabbix Server
/usr/lib/zabbix/alertscripts O volume é usado para scripts de alerta customizados. É o parâmetro AlertScriptsPath no zabbix_server.conf
/usr/lib/zabbix/externalscripts O volume é usado por verificações externas. É o parâmetro ExternalScripts no zabbix_server.conf
/var/lib/zabbix/modules O volume permite carregar módulos adicionais e estende o Zabbix Server usando a funcionalidade LoadModule
/var/lib/zabbix/enc O volume é usado para armazenar arquivos relacionados a TLS. Estes nomes de arquivo são especificados usando as variáveis de ambiente ZBX_TLSCAFILE, ZBX_TLSCRLFILE, ZBX_TLSKEY_FILE e ZBX_TLSPSKFILE
/var/lib/zabbix/ssl/certs O volume é usado como local para os arquivos de certificado de cliente SSL para autenticação de cliente. É o parâmetro SSLCertLocation no zabbix_server.conf
/var/lib/zabbix/ssl/keys O volume é usado como local para os arquivos de chave privada SSL para autenticação de cliente. É o parâmetro SSLKeyLocation no zabbix_server.conf
/var/lib/zabbix/ssl/ssl_ca O volume é usado como local para arquivos de certificado de autoridade (CA) para verificação SSL de certificado de servidor. É o parâmetro SSLCALocation no zabbix_server.conf
/var/lib/zabbix/snmptraps O volume é usado como local para o arquivo snmptraps.log. Ele pode ser compartilhado pelo conteiner zabbix-snmptraps e herdado usando a opção volumes_from do Docker durante a criação de uma nova instância do Zabbix Server. A funcionalidade de processamento de SNMP Trap pode ser habilitada pelo uso do volume compartilhado e alterando a variável de ambiente ZBX_ENABLE_SNMP_TRAPS para 'true'
/var/lib/zabbix/mibs O volume permite adicionar novos arquivos MIB. Ele não suporta subdiretórios, assim todas as MIBs devem estar em /var/lib/zabbix/mibs
Zabbix Proxy
/usr/lib/zabbix/externalscripts O volume é usado por verificações externas. É o parâmetro ExternalScripts no zabbix_proxy.conf
/var/lib/zabbix/modules O volume permite carregar módulos adicionais e estender o Zabbix Proxy usando a funcionalidade LoadModule
/var/lib/zabbix/enc O volume é usado para armazenar arquivos relacionados a TLS. Estes nomes de arquivo são especificados usando as variáveis de ambiente ZBX_TLSCAFILE, ZBX_TLSCRLFILE, ZBX_TLSKEY_FILE e ZBX_TLSPSKFILE
/var/lib/zabbix/ssl/certs O volume é usado como local para os arquivos de certificado de cliente SSL para autenticação de cliente. É o parâmetro SSLCertLocation no zabbix_proxy.conf
/var/lib/zabbix/ssl/keys O volume é usado como local para os arquivos de chave privada SSL para autenticação de cliente. É o parâmetro SSLKeyLocation no zabbix_proxy.conf
/var/lib/zabbix/ssl/ssl_ca O volume é usado como local para arquivos de certificado de autoridade (CA) para verificação SSL de certificado de servidor. É o parâmetro SSLCALocation no zabbix_proxy.conf
/var/lib/zabbix/snmptraps O volume é usado como local para o arquivo snmptraps.log. Ele pode ser compartilhado pelo conteiner zabbix-snmptraps e herdado usando a opção volumes_from do Docker durante a criação de uma nova instância do Zabbix Server. A funcionalidade de processamento de SNMP Trap pode ser habilitada pelo uso do volume compartilhado e alterando a variável de ambiente ZBX_ENABLE_SNMP_TRAPS para 'true'
/var/lib/zabbix/mibs O volume permite adicionar novos arquivos MIB. Ele não suporta subdiretórios, assim todas as MIBs devem estar em /var/lib/zabbix/mibs
Zabbix Web Interface baseada em Apache2 Web Server
/etc/ssl/apache2 O volume permite habilitar o protocolo HTTPS para o Zabbix Web Interface. O volume deve conter os dois arquivos ssl.crt e ssl.key preparados para conexões Apache2 SSL
Zabbix Web Interface baseada em Nginx Web Server
/etc/ssl/nginx O volume permite habilitar o protocolo HTTPS para o Zabbix Web Interface. O volume deve conter os arquivos ssl.crt, ssl.key e dhparam.pem preparados para conexões Nginx SSL
Zabbix snmptraps
/var/lib/zabbix/snmptraps O volume contém o arquivo de log snmptraps.log nomeado com os SNMP Traps recebidos
/var/lib/zabbix/mibs O volume permite adicionar novos arquivos MIB. Ele não suporta subdiretórios, assim todas as MIBs devem estar em /var/lib/zabbix/mibs

Para informação adicional utilize os repositórios oficiais do Zabbix no Docker Hub.

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

Initial configuration

After downloading the images, start the containers by executing docker run command followed by additional arguments to specify required environment variables and/or mount points. Some configuration examples are provided below.

Zabbix must not be run as PID1/as an init process in containers.

Exemplos de uso

Exemplo 1

O exemplo demonstra como executar o Zabbix Server com suporte a banco de dados MySQL, Zabbix Web Interface baseada em Nginx Web Server e Zabbix Java Gateway.

1. Crie uma rede dedicada aos contêineres dos componentes Zabbix:

# docker network create --subnet 172.20.0.0/16 --ip-range 172.20.240.0/20 zabbix-net

2. Inicie uma instância vazia de MySQL Server

# 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 \
      -d mysql:8.0 \
      --restart unless-stopped \
      --character-set-server=utf8 --collation-server=utf8_bin \
      --default-authentication-plugin=mysql_native_password

3. Inicie uma instância do Zabbix Java Gateway

# docker run --name zabbix-java-gateway -t \
      --network=zabbix-net \
      --restart unless-stopped \
      -d zabbix/zabbix-java-gateway:alpine-5.4-latest

4. Inicie a instância do Zabbix Server e a associe à instância do MySQL Server recém-criada

# 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-5.4-latest

A instância do Zabbix Server expõe a porta 10051/TCP (Zabbix trapper) para máquina local.

5. Inicie o Zabbix Web Interface e o associe às instâncias do MySQL Server e 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-5.4-latest

A instância do Zabbix Web Interface expõe a porta 80/TCP (HTTP) para a máquina local.

Exemplo 2

O exemplo demonstra como executar o Zabbix Server com suporte a PostgreSQL, Zabbix Web Interface baseada em Nginx Web Server e funcionalidade SNMP Trap.

1. Crie uma rede dedicada para os contêineres dos componentes Zabbix:

# docker network create --subnet 172.20.0.0/16 --ip-range 172.20.240.0/20 zabbix-net

2. Inicie uma instância vazia do PostgreSQL Server

# 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. Inicie uma instância do 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-5.4-latest

A instância do Zabbix snmptrap expõe a porta 162/UDP (SNMP traps) para a máquina local.

4. Inicie a instância do Zabbix Server e a associe com a instância do PostgreSQL Server

# 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-5.4-latest

A instância do Zabbix Server expõe a porta 10051/TCP (Zabbix trapper) para a máquina local.

5. Inicie o Zabbix Web Interface e o associe às instâncias do PostgreSQL Server e 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-5.4-latest

A instância do Zabbix Web Interface expõe a porta 443/TCP (HTTPS) para a máquina local.
O diretório /etc/ssl/nginx deve conter certificado com o nome requerido.

Exemplo 3

O exemplo demonstra como executar o Zabbix Server com suporte a MySQL, Zabbix Web Interface baseada em Nginx Web Server e Zabbix Java Gateway usando podman em Red Hat 8.

1. Crie um novo pod com o nome zabbix e exponha as portas (web-interface, Zabbix server trapper):

podman pod create --name zabbix -p 80:8080 -p 10051:10051

2. (optional) Inicie o contêiner do Zabbix Agent no pod zabbix:

podman run --name zabbix-agent \
    -eZBX_SERVER_HOST="127.0.0.1,localhost" \
    --restart=always \
    --pod=zabbix \
    -d registry.connect.redhat.com/zabbix/zabbix-agent-50:latest

3. Crie o diretório ./mysql/ na máquina e inicie o Oracle MySQL Server 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

3. Inicie o contêiner do 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-50

4. Inicie o contêiner do Zabbix Java Gateway:

podman run --name zabbix-java-gateway -t \
      --restart=always \
      --pod=zabbix \
      -d registry.connect.redhat.com/zabbix/zabbix-java-gateway-50

5. Inicie o contêiner do Zabbix Web-Interface:

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-50

O Pod zabbix expõe a porta 80/TCP (HTTP) para a máquina local a partir da porta 8080/TCP do contêiner zabbix-web-mysql.