Cómo ver logs de contenedores con Dozzle
Índice de contenidos
- Puntos clave
- ¿Qué es Dozzle y para qué sirve?
- ¿Cómo es el docker-compose.yml de Dozzle?
- ¿Cómo ver los logs en tiempo real desde el navegador?
- ¿Cómo añadir autenticación y vigilar varios hosts?
- ¿Dozzle o Loki: cuándo usar cada uno?
- Preguntas frecuentes
- ¿Es seguro montar el socket de Docker en Dozzle?
- ¿Dozzle guarda un histórico de logs?
- ¿Cuántos recursos consume Dozzle?
- Conclusión
- Fuentes
Dozzle es un visor de logs en tiempo real para contenedores, escrito en Go: no almacena nada, sino que lee los registros directamente del socket de Docker y los transmite a tu navegador. Con Docker lo levantas con un solo docker-compose.yml, se asoma al puerto 8080 y muestra los logs de todos tus contenedores en directo.
Dozzle convierte los logs de todos tus contenedores en una única pestaña del navegador, actualizada en directo, sin instalar nada dentro de ellos. En esta guía lo levantas con un solo archivo docker-compose.yml, ves los registros en tiempo real desde http://127.0.0.1:8080, le añades una capa de autenticación y aprendes a vigilar varios servidores con su modo agente. Al final sabrás cuándo te basta con Dozzle y cuándo necesitas algo más pesado como Loki. La misma explicación está disponible en inglés.
Puntos clave
- Dozzle es un visor de logs en tiempo real para contenedores, escrito en Go y distribuido como una imagen minúscula,
amir20/dozzle, con más de 13 500 estrellas en GitHub. - No guarda nada: lee los logs directamente del socket de Docker y los transmite a tu navegador, así que su huella de memoria es de apenas unos megabytes.
- La interfaz web escucha en el puerto 8080 y para varios servidores existe un modo agente que escucha en el puerto 7007 por TLS.
- Fija siempre una versión concreta como
amir20/dozzle:v10.6.10; usar la etiqueta:latestte expone a cambios de comportamiento sin avisar. - Requiere Docker Engine 19.03 o superior (API 1.40+) y admite autenticación por fichero (
simple) o delegada en un proxy (forward-proxy).
¿Qué es Dozzle y para qué sirve?
Dozzle es una aplicación de código abierto que muestra, en una interfaz web limpia, los logs de tus contenedores Docker en tiempo real. En lugar de encadenar comandos docker logs -f en varias terminales, abres una pestaña del navegador y ves el flujo de registros de cualquier contenedor, con búsqueda, filtros por nivel y resaltado de errores. Está escrito en Go y se distribuye como un binario único dentro de una imagen muy ligera, de ahí que consuma tan poca memoria.
La idea central que conviene interiorizar es que Dozzle no almacena los logs. No monta una base de datos ni un índice: se conecta al socket de Docker (/var/run/docker.sock), pregunta al motor por los registros de cada contenedor y los reenvía a tu navegador según llegan. Cuando cierras la pestaña, no queda rastro. Eso lo hace ideal para inspección puntual y en directo, pero significa que no sirve para buscar en logs de hace tres semanas: para eso está Grafana Loki, que sí ingiere y guarda los registros.
Dozzle detecta los contenedores automáticamente: los nuevos aparecen en la lista sin recargar y los que se paran desaparecen. Por eso encaja tan bien en un homelab, como complemento visual a un panel de gestión como Portainer, donde Dozzle se ocupa de la parte de logs mientras el otro gestiona el ciclo de vida de los contenedores.
¿Cómo es el docker-compose.yml de Dozzle?
Dozzle necesita una sola cosa para funcionar: acceso de lectura al socket de Docker. El resto de opciones son ajustes finos. Este es un docker-compose.yml completo, con la versión fijada, el socket montado en solo lectura, un volumen con nombre para persistir los ajustes y el puerto publicado solo en la propia máquina:
services:
dozzle:
image: amir20/dozzle:v10.6.10
container_name: dozzle
restart: unless-stopped
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
- dozzle_data:/data
ports:
- "127.0.0.1:8080:8080"
environment:
DOZZLE_LEVEL: info
DOZZLE_ENABLE_ACTIONS: "false"
healthcheck:
test: ["CMD", "/dozzle", "healthcheck"]
interval: 30s
timeout: 5s
retries: 3
volumes:
dozzle_data:
Merece la pena detenerse en algunos detalles. El socket se monta como :ro (solo lectura), lo mínimo imprescindible: Dozzle solo necesita leer, no controlar contenedores, así que dejar la opción DOZZLE_ENABLE_ACTIONS en false reduce la superficie de riesgo. El volumen con nombre dozzle_data guarda ajustes como los perfiles de notificación; si quieres entender la diferencia entre un volumen y un bind mount, la explicamos en la guía sobre límites de recursos y logs en Docker. Y al publicar el puerto como 127.0.0.1:8080:8080 lo dejas accesible solo desde el propio servidor, porque Dozzle sin autenticación no debería asomarse nunca a Internet.
Arranca la pila y comprueba el estado:
docker compose up -d
docker compose ps
docker compose logs -f dozzle
Abre http://127.0.0.1:8080 y verás la interfaz de Dozzle con la lista de contenedores en la barra lateral.
¿Cómo ver los logs en tiempo real desde el navegador?
Al entrar, la columna izquierda lista todos los contenedores que el motor de Docker conoce, con un indicador de color según su estado. Pulsa en cualquiera y su flujo de logs aparece a la derecha, avanzando en directo a medida que el contenedor escribe nuevas líneas. Puedes fijar varios contenedores a la vez para verlos en paralelo, algo muy útil cuando depuras una aplicación y su base de datos al mismo tiempo.
Las funciones que más se usan en el día a día son:
- Búsqueda en vivo: filtra el flujo por texto según van llegando las líneas, sin detener el stream.
- Filtro por nivel: resalta y aísla mensajes
error,warnoinfo, con detección automática del nivel en formatos habituales. - Descarga: exporta el histórico disponible de un contenedor a un fichero de texto para analizarlo con calma.
- Enlaces compartibles: cada vista tiene su URL, así que puedes mandar a un compañero el enlace directo a los logs de un contenedor concreto.
Conviene recordar que Dozzle muestra lo que el controlador de logs de Docker guarda para cada contenedor. Si has limitado el tamaño del log con rotación (por ejemplo, max-size: 10m), Dozzle solo verá esa ventana; el detalle de cómo configurar la rotación lo tienes en límites de recursos y logs en Docker.
¿Cómo añadir autenticación y vigilar varios hosts?
Dozzle trae dos modos de autenticación. El más sencillo es el proveedor simple, basado en un fichero users.yml con las credenciales y contraseñas cifradas con bcrypt. El propio contenedor genera ese fichero por ti:
docker run -it --rm amir20/dozzle:v10.6.10 generate admin \
--password "una-contraseña-larga" \
--email tu@correo.es --name "Admin" > users.yml
Después montas ese users.yml en /data/users.yml y activas el proveedor con la variable de entorno:
environment:
DOZZLE_AUTH_PROVIDER: simple
volumes:
- ./users.yml:/data/users.yml:ro
El segundo modo es forward-proxy, que delega la autenticación en un servicio externo como Authelia, Cloudflare Access o Pocket ID; Dozzle lee la identidad de las cabeceras Remote-User y Remote-Email que inyecta el proxy. Es la opción natural si ya publicas tus servicios detrás de un proxy inverso como Traefik con inicio de sesión único.
Para vigilar varios servidores desde una sola interfaz, Dozzle usa un modo agente. En cada máquina remota arrancas un agente que expone su Docker por una conexión TLS en el puerto 7007:
services:
dozzle-agent:
image: amir20/dozzle:v10.6.10
command: agent
restart: unless-stopped
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
ports:
- "7007:7007"
Y en la instancia central le indicas dónde están esos agentes con DOZZLE_REMOTE_AGENT, separando varios por comas: DOZZLE_REMOTE_AGENT: servidor-1:7007,servidor-2:7007. Así reúnes los logs de toda tu flota en una única pestaña, sin abrir el socket de cada máquina a la red.
¿Dozzle o Loki: cuándo usar cada uno?
No compiten, se complementan. Dozzle es un visor en directo, sin almacenamiento; Loki es un sistema de agregación que ingiere, indexa por etiquetas y conserva los logs para consultarlos después con LogQL. La elección depende de qué problema tengas delante:
| Criterio | Dozzle | Grafana Loki |
|---|---|---|
| Función | Ver logs en directo | Almacenar y consultar histórico |
| Almacenamiento | Ninguno (efímero) | Persistente, con retención |
| Consulta histórica | No | Sí (LogQL) |
| Recursos | Unos pocos MB de RAM | Cientos de MB y disco |
| Puesta en marcha | Un contenedor | Varios (Loki, Promtail, Grafana) |
En la práctica, muchos homelabs corren los dos: Dozzle para el vistazo rápido de "¿qué está pasando ahora mismo?" y Loki para "¿qué pasó anoche a las tres?". Si solo vas a instalar una herramienta de logs y buscas simplicidad, empieza por Dozzle; cuando necesites retención y búsquedas complejas, añade Loki al lado.
Preguntas frecuentes
¿Es seguro montar el socket de Docker en Dozzle?
Montar /var/run/docker.sock da acceso al motor de Docker, así que trátalo con cuidado. Mitiga el riesgo montándolo en solo lectura (:ro), dejando DOZZLE_ENABLE_ACTIONS en false para que Dozzle no pueda parar ni reiniciar contenedores, y no exponiendo el puerto 8080 a Internet sin autenticación. Para varios hosts, el modo agente es más seguro que abrir el socket por la red, porque cifra la conexión con TLS.
¿Dozzle guarda un histórico de logs?
No. Dozzle no almacena nada: transmite en vivo lo que el controlador de logs de Docker tiene para cada contenedor. Si borras el contenedor o Docker rota su fichero de log, esa información desaparece de Dozzle. Para conservar los registros semanas o meses, necesitas un agregador con almacenamiento como Grafana Loki; Dozzle es la ventana en directo, no el archivo.
¿Cuántos recursos consume Dozzle?
Muy pocos. Al estar escrito en Go y no mantener ninguna base de datos, su consumo en reposo se mide en unos pocos megabytes de RAM, órdenes de magnitud por debajo de una pila Prometheus o Loki. Es de los servicios más ligeros que puedes tener corriendo permanentemente en un servidor doméstico, incluso en una Raspberry Pi.
Conclusión
Con un único docker-compose.yml y acceso de lectura al socket de Docker, Dozzle te da una ventana en directo a los logs de todos tus contenedores en el puerto 8080, con búsqueda, filtros por nivel y descarga. Añádele el proveedor simple para protegerlo, el modo agente en el puerto 7007 para reunir varios servidores y tendrás una herramienta de diagnóstico instantáneo. Cuando necesites conservar y consultar el histórico, combínalo con Grafana Loki y protégelo todo detrás de un proxy inverso. Dozzle es el vistazo rápido; el resto de tu pila de observabilidad se construye alrededor.
Fuentes: [1] Documentación oficial de Dozzle[1], [2] Repositorio de Dozzle en GitHub[2], [3] Imagen oficial amir20/dozzle en Docker Hub[3], [4] Docker Docs: controladores de logging[4].