Skip to content

Reverse proxy et chemin de base ​

Dozzle est souvent placé derrière un reverse proxy pour la terminaison TLS, l'authentification, ou pour partager un nom d'hôte avec d'autres services. Cette page couvre à la fois le montage de Dozzle sur un sous-chemin et les réglages de proxy nécessaires au bon fonctionnement du streaming.

Changer le chemin de base ​

Par défaut, Dozzle est monté sur /. Cela peut être modifié avec l'option --base ou la variable d'environnement DOZZLE_BASE. Par exemple, pour le monter sur /foobar :

sh
docker run --volume=/var/run/docker.sock:/var/run/docker.sock -p 8080:8080 amir20/dozzle --base /foobar
yaml
services:
  dozzle:
    image: amir20/dozzle:latest
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    ports:
      - 8080:8080
    environment:
      DOZZLE_BASE: /foobar

Dozzle sera accessible sur http://localhost:8080/foobar/. Cette option réécrit toutes les ressources vers /foobar/{file.path} et redirige automatiquement /foobar vers /foobar/.

Prérequis du proxy ​

Dozzle diffuse les logs via Server-Sent Events (SSE) et utilise WebSocket pour les shells de conteneurs. Les reverse proxies doivent :

  1. Désactiver la mise en tampon des réponses : SSE envoie les événements au fil de l'eau. Toute mise en tampon fait arriver les logs par à-coups, voire jamais. Dozzle envoie X-Accel-Buffering: no, mais certains proxies l'ignorent.
  2. Transmettre les en-têtes d'upgrade WebSocket : requis pour les fonctions shell et attach.
  3. Éviter de compresser text/event-stream : les middlewares de compression cassent souvent le SSE.

Nginx ​

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";
}

Supprimez le préfixe ^~ /foobar/ si Dozzle est monté à la racine. Voir aussi l'entrée de la FAQ sur la désactivation de la mise en tampon.

Traefik ​

Traefik gère les upgrades WebSocket automatiquement, mais le middleware compress par défaut casse le SSE. Excluez text/event-stream :

yaml
http:
  middlewares:
    middlewares-compress:
      compress:
        excludedContentTypes:
          - text/event-stream

Voici ensuite un bloc de labels typique sur le service Dozzle :

yaml
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=8080

Caddy ​

caddyfile
dozzle.example.com {
    reverse_proxy dozzle:8080 {
        flush_interval -1
    }
}

flush_interval -1 désactive la mise en tampon des réponses pour les endpoints de streaming.

Pièges courants ​

  • Page blanche ou ressources en 404 avec --base : le proxy retire le préfixe de chemin avant de transmettre la requête. Configurez-le pour passer le chemin complet à Dozzle.
  • Les logs s'arrêtent après quelques secondes : les délais d'expiration de connexion du proxy sont trop courts. Augmentez les délais de lecture/envoi à plusieurs minutes au moins (par ex. Nginx proxy_read_timeout 3600s).
  • Le shell se déconnecte immédiatement : les en-têtes d'upgrade WebSocket ne sont pas transmis. Vérifiez les en-têtes Upgrade et Connection.

Publié sous licence MIT. Open source et sponsorisé par Docker OSS.