5 Instalación desde contenedores

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.

Estructura

Todos los componentes de Zabbix están disponibles en los siguientes repositorios Docker:

Además, hay compatibilidad con las capturas SNMP. Se proporciona como repositorio adicional (zabbix/zabbix-snmptraps) basado únicamente en Ubuntu Trusty. Podría estar vinculado con el servidor Zabbix y Proxy de Zabbix.

Versiones

Cada repositorio de componentes de Zabbix contiene las siguientes etiquetas:

  • latest: última versión estable de un componente Zabbix basado en Imagen de Alpine Linux
  • alpine-latest: última versión estable de un componente Zabbix basado en la imagen de Alpine Linux
  • ubuntu-latest: última versión estable de un componente Zabbix basado en la imagen de Ubuntu
  • alpine-6.0-latest: última versión menor de un componente Zabbix 6.0 basado en la imagen de Alpine Linux
  • ubuntu-6.0-latest: última versión menor de un componente Zabbix 6.0 basado en la imagen de Ubuntu
  • alpine-6.0.* - diferentes versiones menores de un componente Zabbix 6.0 basado en la imagen de Alpine Linux, donde * es la versión menor del componente Zabbix
  • ubuntu-6.0.* - diferentes versiones menores de un componente Zabbix 6.0 basado en la imagen de Ubuntu, donde * es la versión menor del componente Zabbix

Docker Compose

Zabbix también proporciona archivos de composición para definir y ejecutar componentes Zabbix de múltiples contenedores en Docker. Estos archivos de composición están disponibles en el repositorio oficial de Docker de Zabbix en github.com: https://github.com/zabbix/zabbix-docker. Estos archivos de composición se agregan como ejemplos, están sobrecargados. Por ejemplo, contienen servidores proxy con compatibilidad con MySQL y SQLite3.

Hay algunas versiones diferentes de archivos de composición:

Nombre de archivo Descripción
docker-compose_v3_alpine_mysql_latest.yaml El archivo de composición ejecuta la última versión de los componentes Zabbix 6.0 en Alpine Linux con compatibilidad con bases de datos MySQL.
docker-compose_v3_alpine_mysql_local.yaml El archivo de composición compila localmente la última versión de Zabbix 6.0 y ejecuta los componentes de Zabbix en Alpine Linux con soporte de base de datos MySQL.
docker-compose_v3_alpine_pgsql_latest.yaml El archivo de composición ejecuta la última versión de los componentes de Zabbix 6.0 en Alpine Linux con soporte de base de datos PostgreSQL.
docker-compose_v3_alpine_pgsql_local.yaml El archivo de composición compila localmente la última versión de Zabbix 6.0 y ejecuta los componentes de Zabbix en Alpine Linux con soporte de base de datos PostgreSQL.
docker-compose_v3_centos_mysql_latest.yaml El archivo de composición ejecuta la última versión de los componentes de Zabbix 6.0 en CentOS 8 con soporte de base de datos MySQL.
docker-compose_v3_centos_mysql_local.yaml El archivo de composición compila localmente la última versión de Zabbix 6.0 y ejecuta los componentes de Zabbix en CentOS 8 con soporte de base de datos MySQL.
docker-compose_v3_centos_pgsql_latest.yaml El archivo de composición ejecuta la última versión de los componentes de Zabbix 6.0 en CentOS 8 con soporte de base de datos PostgreSQL.
docker-compose_v3_centos_pgsql_local.yaml El archivo de composición compila localmente la última versión de Zabbix 6.0 y ejecuta los componentes de Zabbix en CentOS 8 con soporte de base de datos PostgreSQL.
docker-compose_v3_ubuntu_mysql_latest.yaml El archivo de composición ejecuta la última versión de los componentes de Zabbix 6.0 en Ubuntu 20.04 con soporte de base de datos MySQL.
docker-compose_v3_ubuntu_mysql_local.yaml El archivo de composición compila localmente la última versión de Zabbix 6.0 y ejecuta los componentes de Zabbix en Ubuntu 20.04 con soporte de base de datos MySQL.
docker-compose_v3_ubuntu_pgsql_latest.yaml El archivo de composición ejecuta la última versión de los componentes de Zabbix 6.0 en Ubuntu 20.04 con soporte de base de datos PostgreSQL.
docker-compose_v3_ubuntu_pgsql_local.yaml El archivo de composición compila localmente la última versión de Zabbix 6.0 y ejecuta los componentes de Zabbix en Ubuntu 20.04 con soporte de base de datos PostgreSQL.

Los archivos de composición de Docker disponibles son compatibles con la versión 3 de Docker Compose.

Variables de entorno

Todas las imágenes de componentes de Zabbix proporcionan variables de entorno para controlar la configuración. Estas variables de entorno se enumeran en cada repositorio de componentes. Estas variables de entorno son opciones de los archivos de configuración de Zabbix, pero con un método de denominación diferente. Por ejemplo, ZBX_LOGSLOWQUERIES es igual a LogSlowQueries de los archivos de configuración del servidor Zabbix y del proxy de Zabbix.

No se permite cambiar algunas de las opciones de configuración. Por ejemplo, PIDFile y LogType.

Algunos componentes tienen variables de entorno específicas, que no existen en los archivos de configuración oficiales de Zabbix:

Variable Componentes Descripción
DB_SERVER_HOST Servidor
Proxy
Interfaz web
Esta variable es la dirección IP o el nombre DNS del servidor MySQL o PostgreSQL.
De manera predeterminada, el valor es mysql-server o postgres-server para MySQL o PostgreSQL respectivamente
DB_SERVER_PORT Servidor
Proxy
Interfaz web
Esta variable es el puerto del servidor MySQL o PostgreSQL.
De manera predeterminada, el valor es '3306' o '5432' respectivamente.
MYSQL_USER Servidor
Proxy
Interfaz web
Usuario de la base de datos MySQL.
De manera predeterminada, el valor es 'zabbix'.
MYSQL_PASSWORD Servidor
Proxy
Interfaz web
Contraseña de la base de datos MySQL.
De manera predeterminada, el valor es 'zabbix'.
MYSQL_DATABASE Servidor
Proxy
Interfaz web
Nombre de la base de datos de Zabbix.
De manera predeterminada, el valor es 'zabbix' para el servidor Zabbix y 'zabbix_proxy' para el proxy Zabbix.
POSTGRES_USER Servidor
Interfaz web
Usuario de la base de datos PostgreSQL.
De manera predeterminada, el valor es 'zabbix'.
POSTGRES_PASSWORD Servidor
Interfaz web
Contraseña de la base de datos PostgreSQL.
De manera predeterminada, el valor es 'zabbix'.
POSTGRES_DB Servidor
Interfaz web
Nombre de la base de datos de Zabbix.
De manera predeterminada, el valor es 'zabbix'.
PHP_TZ Interfaz web Zona horaria en formato PHP. La lista completa de zonas horarias admitidas está disponible en php.net.
De manera predeterminada, el valor es 'Europe/Riga'.
ZBX_SERVER_NAME Interfaz web Nombre de instalación de Zabbix visible en la esquina superior derecha de la interfaz web.
De manera predeterminada, el valor es 'Zabbix Docker'
ZBX_JAVAGATEWAY_ENABLE Servidor
Proxy
Habilita la comunicación con la puerta de enlace Java de Zabbix para recopilar comprobaciones relacionadas con Java.
De manera predeterminada, el valor es "false"
ZBX_ENABLE_SNMP_TRAPS Servidor
Proxy
Habilita la función de trampa SNMP. Requiere una instancia zabbix-snmptraps y un volumen compartido /var/lib/zabbix/snmptraps para el servidor Zabbix o el proxy Zabbix.
Volúmenes

Las imágenes permiten utilizar algunos puntos de montaje. Estos puntos de montaje son diferentes y dependen del tipo de componente de Zabbix:

Volumen Descripción
Agente Zabbix
/etc/zabbix/zabbix_agentd.d El volumen permite incluir archivos *.conf y ampliar el agente Zabbix utilizando la función UserParameter
/var/lib/zabbix/modules El volumen permite cargar módulos adicionales y ampliar el agente Zabbix utilizando la función LoadModule
/var/lib/zabbix/enc El volumen se utiliza para almacenar archivos relacionados con TLS. Estos nombres de archivo se especifican mediante las variables de entorno ZBX_TLSCAFILE, ZBX_TLSCRLFILE, ZBX_TLSKEY_FILE y ZBX_TLSPSKFILE
Servidor Zabbix
/usr/lib/zabbix/alertscripts El volumen se utiliza para scripts de alerta personalizados. Es el parámetro AlertScriptsPath en zabbix_server.conf
/usr/lib/zabbix/externalscripts El volumen lo utilizan las comprobaciones externas. Es el parámetro ExternalScripts en zabbix_server.conf
/var/lib/zabbix/modules El volumen permite cargar módulos adicionales y ampliar el servidor Zabbix mediante la función LoadModule
/var/lib/zabbix/enc El volumen se utiliza para almacenar archivos relacionados con TLS. Estos nombres de archivo se especifican mediante las variables de entorno ZBX_TLSCAFILE, ZBX_TLSCRLFILE, ZBX_TLSKEY_FILE y ZBX_TLSPSKFILE
/var/lib/zabbix/ssl/certs El volumen se utiliza como ubicación de los archivos de certificado de cliente SSL para la autenticación del cliente. Es el parámetro SSLCertLocation en zabbix_server.conf
/var/lib/zabbix/ssl/keys El volumen se utiliza como ubicación de los archivos de clave privada SSL para la autenticación del cliente. Es el parámetro SSLKeyLocation en zabbix_server.conf
/var/lib/zabbix/ssl/ssl_ca El volumen se utiliza como ubicación de los archivos de la autoridad de certificación (CA) para la verificación del certificado del servidor SSL. Es el parámetro SSLCALocation en zabbix_server.conf
/var/lib/zabbix/snmptraps El volumen se utiliza como ubicación del archivo snmptraps.log. Puede ser compartido por el contenedor zabbix-snmptraps y heredado utilizando la opción volumes_from Docker al crear una nueva instancia del servidor Zabbix. La función de procesamiento de trampas SNMP se puede habilitar utilizando un volumen compartido y cambiando la variable de entorno ZBX_ENABLE_SNMP_TRAPS a 'true'
/var/lib/zabbix/mibs El volumen permite agregar nuevos archivos MIB. No admite subdirectorios, todos los MIB deben ubicarse en /var/lib/zabbix/mibs
Proxy Zabbix
/usr/lib/zabbix/externalscripts El volumen es utilizado por comprobaciones externas. Es el parámetro ExternalScripts en zabbix_proxy.conf
/var/lib/zabbix/db_data/ El volumen permite almacenar archivos de base de datos en dispositivos externos. Compatible solo con proxy Zabbix con SQLite3
/var/lib/zabbix/modules El volumen permite cargar módulos adicionales y ampliar el servidor Zabbix mediante la función LoadModule
/var/lib/zabbix/enc El volumen se utiliza para almacenar archivos relacionados con TLS. Estos nombres de archivo se especifican mediante las variables de entorno ZBX_TLSCAFILE, ZBX_TLSCRLFILE, ZBX_TLSKEY_FILE y ZBX_TLSPSKFILE
/var/lib/zabbix/ssl/certs El volumen se utiliza como ubicación de los archivos de certificado de cliente SSL para la autenticación del cliente. Es el parámetro SSLCertLocation en zabbix_proxy.conf
/var/lib/zabbix/ssl/keys El volumen se utiliza como ubicación de los archivos de clave privada SSL para la autenticación del cliente. Es el parámetro SSLKeyLocation en zabbix_proxy.conf
/var/lib/zabbix/ssl/ssl_ca El volumen se utiliza como ubicación de los archivos de la autoridad de certificación (CA) para la verificación del certificado del servidor SSL. Es el parámetro SSLCALocation en zabbix_proxy.conf
/var/lib/zabbix/snmptraps El volumen se utiliza como ubicación del archivo snmptraps.log. Puede ser compartido por el contenedor zabbix-snmptraps y heredado utilizando la opción volumes_from Docker al crear una nueva instancia del servidor Zabbix. La función de procesamiento de trampas SNMP se puede habilitar utilizando un volumen compartido y cambiando la variable de entorno ZBX_ENABLE_SNMP_TRAPS a 'true'
/var/lib/zabbix/mibs El volumen permite agregar nuevos archivos MIB. No admite subdirectorios, todos los MIB deben ubicarse en /var/lib/zabbix/mibs
Interfaz web de Zabbix basada en el servidor web Apache2
/etc/ssl/apache2 El volumen permite habilitar HTTPS para la interfaz web de Zabbix. El volumen debe contener los dos archivos ssl.crt y ssl.key preparados para las conexiones SSL de Apache2
Interfaz web de Zabbix basada en el servidor web Nginx
/etc/ssl/nginx El volumen permite habilitar HTTPS para la interfaz web de Zabbix. El volumen debe contener los dos archivos ssl.crt, ssl.key y dhparam.pem preparados para las conexiones SSL de Nginx
Zabbix snmptraps
/var/lib/zabbix/snmptraps El volumen contiene el archivo de registro snmptraps.log cuyo nombre incluye las trampas SNMP recibidas
/var/lib/zabbix/mibs El volumen permite agregar nuevos archivos MIB. No admite subdirectorios, todos los MIB deben ubicarse en /var/lib/zabbix/mibs

Para obtener información adicional, use los repositorios oficiales de Zabbix en 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

Configuración inicial

Después de descargar las imágenes, inicie los contenedores ejecutando el comando docker run seguido de argumentos adicionales para especificar las variables de entorno y/o los puntos de montaje requeridos. A continuación, se proporcionan algunos ejemplos de configuración.

Zabbix no debe ejecutarse como PID1/como un proceso init en los contenedores.

Ejemplos

Ejemplo 1

El ejemplo demuestra cómo ejecutar el servidor Zabbix con soporte a la base de datos MySQL, interfaz web de Zabbix basada en el servidor web Nginx y Zabbix Java gateway.

1. Crear una red dedicada para los contenedores componentes de Zabbix:

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

2. Iniciar la instancia vacía del servidor 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 \
      -d mysql:8.0 \
      --restart unless-stopped \
      --character-set-server=utf8 --collation-server=utf8_bin \
      --default-authentication-plugin=mysql_native_password

3. Iniciar la instancia Java gateway de Zabbix

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

4. Iniciar la instancia del servidor Zabbix y enlazar con la instancia creada del servidor 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-5.4-latest

La instancia del servidor Zabbix expone el puerto 10051/TCP port (captura de Zabbix) a la máquina anfitrión.

5. Iniciar la interfaz web de Zabbix y enlazar la instancias creadas del servidor MySQL y del servidor Zabbix.

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

La instancia de la interfaz web de Zabbix expone el puerto 80/TCP (HTTP) a la máquina anfitrión.

Ejemplo 2

El ejemplo demuestra cómo ejecutar el servidor Zabbix con soporte a la base de datos PostgreSQL, interfaz web de Zabbix basada en el servidor web Nginx y características de captura SNMP.

1. Crear una red dedicada para los contenedores componentes de Zabbix:

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

2. Iniciar la instancia vacía del servidor 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. Iniciar la instancia snmptraps de Zabbix

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

La instancia snmptrap de Zabbix expone el puerto 162/UDP (captura SNMP) al host anfitrión.

4. Iniciar la instancia del servidor Zabbix y enlazar con la instancia creada del servidor 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-5.4-latest

La instancia del servidor de Zabbix expone el puerto 10051/UDP (captura Zabbix) al host anfitrión.

5. Iniciar la interfaz web de Zabbix y enlazar la instancias creadas del servidor PostgreSQL y del servidor Zabbix

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

La instancia de la interfaz web de Zabbix expone el puerto 443/TCP (HTTPS) a la máquina anfitrión.
El directorio /etc/ssl/nginx debe contener el certificado con el nombre requerido.

Ejemplo 3

El ejemplo demuestra cómo ejecutar el servidor Zabbix con soporte a la base de datos MySQL, interfaz web de Zabbix basada en el servidor web Nginx y Zabbix Java gateway usando podman en Red Hat 8.

1. Crear un nuevo pod llamado zabbix y exponer los puertos (interfaz web, servidor de captura Zabbix):

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

2. (opcional) Iniciar el contenedor del agente Zabbix en el 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. Crear el directorio./mysql/ en el host e iniciar el servidor 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

3. Iniciar el contenedor del servidor Zabbix:

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. Iniciar el contenedor Java Gateway de Zabbix:

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

5. Iniciar el contenedor de la interfaz web de 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-50

El pod zabbix expone el puerto 80/TCP (HTTP) a la máquina anfitrión desde el contenedor zabbix-web-mysql8080/TCP