Proxy inverso y ruta base
Es habitual poner Dozzle detrás de un proxy inverso para terminar TLS, autenticar o compartir un nombre de host con otros servicios. Esta página cubre tanto el montaje de Dozzle en una subruta como los ajustes del proxy necesarios para que el streaming funcione bien.
Cambiar la ruta base
Por defecto Dozzle se monta en /. Puedes cambiarlo con el flag --base o con la variable de entorno DOZZLE_BASE. Por ejemplo, para montarlo en /foobar:
docker run --volume=/var/run/docker.sock:/var/run/docker.sock -p 8080:8080 amir20/dozzle --base /foobarservices:
dozzle:
image: amir20/dozzle:latest
volumes:
- /var/run/docker.sock:/var/run/docker.sock
ports:
- 8080:8080
environment:
DOZZLE_BASE: /foobarDozzle estará disponible en http://localhost:8080/foobar/. Esta opción reescribe todos los recursos a /foobar/{file.path} y redirige automáticamente /foobar a /foobar/.
Requisitos del proxy
Dozzle envía los logs por Server-Sent Events (SSE) y usa WebSocket para las shells de los contenedores. Los proxies inversos deben:
- Desactivar el búfer de las respuestas: SSE entrega los eventos según ocurren. Cualquier búfer hace que los logs lleguen a ráfagas o que no lleguen nunca. Dozzle envía
X-Accel-Buffering: no, pero algunos proxies lo ignoran. - Reenviar las cabeceras de actualización a WebSocket: son necesarias para las funciones de shell y attach.
- No comprimir
text/event-stream: los middlewares de compresión suelen romper SSE.
Nginx
location ^~ /foobar/ {
proxy_pass http://dozzle:8080;
chunked_transfer_encoding off;
proxy_buffering off;
proxy_cache off;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}Quita el prefijo ^~ /foobar/ si Dozzle está montado en la raíz. Consulta también la entrada de la FAQ sobre desactivar el búfer.
Traefik
Traefik gestiona la actualización a WebSocket automáticamente, pero el middleware compress por defecto rompe SSE. Excluye text/event-stream:
http:
middlewares:
middlewares-compress:
compress:
excludedContentTypes:
- text/event-streamY este sería un bloque de etiquetas típico en el servicio de Dozzle:
services:
dozzle:
image: amir20/dozzle:latest
labels:
- traefik.enable=true
- traefik.http.routers.dozzle.rule=Host(`dozzle.example.com`)
- traefik.http.routers.dozzle.entrypoints=websecure
- traefik.http.routers.dozzle.tls.certresolver=letsencrypt
- traefik.http.services.dozzle.loadbalancer.server.port=8080Caddy
dozzle.example.com {
reverse_proxy dozzle:8080 {
flush_interval -1
}
}flush_interval -1 desactiva el búfer de respuesta en los endpoints de streaming.
Problemas habituales
- Página en blanco o recursos con error 404 al usar
--base: el proxy está quitando el prefijo de la ruta antes de reenviar la petición. Configúralo para que pase la ruta completa a Dozzle. - Los logs se cortan a los pocos segundos: los tiempos de espera de conexión del proxy son demasiado cortos. Súbelos a varios minutos como mínimo (por ejemplo,
proxy_read_timeout 3600sen Nginx). - La shell se desconecta al instante: no se están reenviando las cabeceras de actualización a WebSocket. Comprueba las cabeceras
UpgradeyConnection.