Dozzle, visualiza logs de contenedores Docker

Dozzle es una herramienta ligera que nos permite visualizar en tiempo real los logs de nuestros contenedores Docker desde una interfaz web.

Si trabajamos habitualmente con Docker seguramente utilizaremos comandos como:

docker logs -f mi-contenedor

El problema viene cuando tenemos bastantes contenedores, porque puede resultar algo lento y Dozzle dispone de una interfaz desde la que seleccionamos el contenedor y consultamos sus logs rápidamente.

Lo he estado probando y resulta especialmente cómodo para revisar rápidamente qué está pasando en mis contenedores sin necesidad de entrar por terminal al servidor, ya que te conectas desde el navegador.

🐳 Instalando Dozzle con docker.

Creamos en su carpeta el docker-compose.yaml:

services:
  dozzle:
    image: amir20/dozzle:v10
    container_name: dozzle
    restart: unless-stopped
    ports:
      - "8080:8080"
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro
      - dozzle-data:/data

volumes:
  dozzle-data:

Una vez iniciado Dozzle estará disponible en:

http://IP-DE-NUESTRO-SERVIDOR:8080

Y ya tendremos nuestro Dozzle funcionando. 🎉

Desde la interfaz podremos seleccionar cualquiera de nuestros contenedores y visualizar sus logs en tiempo real.

Además, podremos realizar búsquedas, utilizar expresiones regulares, consultar el consumo de CPU y memoria o visualizar los logs de varios contenedores al mismo tiempo.

Nota: Dozzle no almacena nuestros logs, simplemente los consulta y los muestra en tiempo real.

🖥️ Funciones varias

Esta herramienta, aparte de mostrar los logs, tiene algunas funciones extra:

  • Poder realizar búsquedas directamente desde la interfaz, por ejemplo buscando palabras concretas como Error o Exception, localizando rápidamente los mensajes. Además, soporta expresiones regulares y consultas SQL.
  • Permite dividir la pantalla para visualizar los logs de varios contenedores al mismo tiempo, que nos viene bien si necesitamos, por ejemplo, ver los logs de una API y Nginx a la vez.
  • Consultar estadísticas como el consumo de CPU y memoria de nuestros contenedores.

🔐 Añadiendo autenticación

Por defecto Dozzle no tiene autenticación habilitada.

Si únicamente accedemos desde nuestra red local puede ser suficiente, pero si vamos a publicarlo mediante un dominio o hacerlo accesible desde otras redes, deberíamos protegerlo.

Podemos habilitar la autenticación añadiendo:

environment:
  - DOZZLE_AUTH_PROVIDER=simple

Nuestro docker-compose.yaml quedaría:

services:
  dozzle:
    image: amir20/dozzle:v10
    container_name: dozzle
    restart: unless-stopped
    ports:
      - "8080:8080"
    environment:
      - DOZZLE_AUTH_PROVIDER=simple
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro
      - dozzle-data:/data

volumes:
  dozzle-data:

Después recreamos el contenedor:

docker compose up -d

Y podremos configurar nuestros usuarios para acceder a Dozzle.

Otra opción es utilizar un reverse proxy con autenticación delante de Dozzle.

⚠️ Acceso al socket de Docker

Para poder consultar nuestros contenedores, Dozzle necesita acceso al socket de Docker:

/var/run/docker.sock

En nuestro ejemplo lo hemos montado como:

- /var/run/docker.sock:/var/run/docker.sock:ro

Aunque lo montemos como read-only, dar acceso al socket de Docker a un contenedor tiene implicaciones importantes de seguridad.

Por tanto, no publicaría Dozzle directamente en Internet sin ningún tipo de protección.

Si vamos a acceder únicamente nosotros, podemos dejarlo detrás de nuestra red privada, VPN, Tailscale o utilizar un reverse proxy con autenticación.

🛠️ Acciones sobre los contenedores

Dozzle también permite realizar acciones directamente sobre nuestros contenedores, como: Start, Stop, Restart

Estas opciones vienen deshabilitadas por defecto.

Si queremos habilitarlas podemos añadir:

environment:
  - DOZZLE_ENABLE_ACTIONS=true

También existe la posibilidad de acceder al shell de los contenedores:

environment:
  - DOZZLE_ENABLE_SHELL=true

Personalmente, para utilizar Dozzle únicamente como visor de logs dejaría ambas opciones deshabilitadas.

Si necesito reiniciar un contenedor o acceder a su shell prefiero hacerlo directamente desde el servidor.

Menos permisos, menos problemas. 😅

🌐 Monitorizando varios servidores Docker

Otra opción interesante de Dozzle es que podemos visualizar los contenedores de varios servidores desde una única interfaz.

Para ello podemos instalar Dozzle Agent en nuestros servidores remotos, con el compose:

services:
  dozzle-agent:
    image: amir20/dozzle:v10
    container_name: dozzle-agent
    command: agent
    restart: unless-stopped
    ports:
      - "7007:7007"
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro

Y desde nuestro Dozzle principal podremos conectarnos a uno o varios agentes añadiendo la parte de environment :

environment:
  - DOZZLE_REMOTE_AGENT=192.168.1.50:7007|Servidor-1,192.168.1.51:7007|Servidor-2

Este ejemplo es de añadir varios servers remotos, pero tb podemos agrupar como por ejemplo:

environment:
  - DOZZLE_REMOTE_AGENT=192.168.1.50:7007|Server-1|PROD,192.168.1.51:7007|Server-2|PROD,192.168.1.60:7007|Server-DEV|DEV

Esto resulta especialmente útil si administramos varios servidores Docker y no queremos tener una instancia completa de Dozzle independiente en cada uno.

Eso sí, como siempre, no expondría el puerto del agente directamente a Internet. Lo utilizaría dentro de una red privada, VPN o similar.

💾 Datos persistentes

Dozzle utiliza /data para almacenar su configuración y otros datos.

En nuestro ejemplo hemos utilizado:

- dozzle-data:/data

por lo que esta información seguirá existiendo aunque eliminemos o recreemos el contenedor.

Podemos localizar el volumen con:

docker volume ls

Y como siempre: tener un volumen persistente no significa tener un backup.

🔄 Actualizando Dozzle

Al utilizar Docker Compose podemos actualizar Dozzle fácilmente con:

docker compose pull

Y recreamos el servicio:

docker compose up -d


Realmente Dozzle no viene a sustituir: docker logs sino a ofrecernos una forma más cómoda de consultar los logs.

Además, consume pocos recursos y desplegarlo apenas nos lleva unos minutos.

Una de esas pequeñas herramientas que instalas por probar y al final se queda 😅

¡Y hasta aquí el post de hoy!

¡Espero que os sirva de ayuda!

Salu2!