Reverse Proxy & Base Path ​
Dozzle is commonly placed behind a reverse proxy for TLS termination, authentication, or to share a hostname with other services. This page covers both mounting Dozzle at a sub-path and the proxy settings needed to make streaming work correctly.
Changing the Base Path ​
Dozzle by default mounts to /. This can be changed with the --base flag or the DOZZLE_BASE environment variable. For example, to mount at /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 will be available at http://localhost:8080/foobar/. This option rewrites all assets to /foobar/{file.path} and automatically redirects /foobar to /foobar/.
Proxy Requirements ​
Dozzle streams logs over Server-Sent Events (SSE) and uses WebSocket for container shells. Reverse proxies must:
- Disable response buffering — SSE delivers events as they happen. Any buffering causes logs to arrive in bursts or never arrive at all. Dozzle sends
X-Accel-Buffering: no, but some proxies ignore it. - Forward WebSocket upgrade headers — required for the shell and attach features.
- Avoid compressing
text/event-stream— compression middleware often breaks 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";
}Drop the ^~ /foobar/ prefix if Dozzle is mounted at the root. See also the FAQ entry on disabling buffering.
Traefik ​
Traefik handles WebSocket upgrades automatically, but the default compress middleware will break SSE. Exclude text/event-stream:
http:
middlewares:
middlewares-compress:
compress:
excludedContentTypes:
- text/event-streamThen a typical labels block on the Dozzle service:
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 disables response buffering for streaming endpoints.
Common Pitfalls ​
- Blank page or assets 404 when using
--base— the proxy is stripping the path prefix before forwarding. Configure it to pass the full path through to Dozzle. - Logs stop after a few seconds — connection timeouts on the proxy are too short. Increase read/send timeouts to at least a few minutes (e.g. Nginx
proxy_read_timeout 3600s). - Shell disconnects immediately — WebSocket upgrade headers are not being forwarded. Verify
UpgradeandConnectionheaders.