Forum Linux.général Problème de Routage Traefik dans Docker

Posté par  . Licence CC By‑SA.
Étiquettes :
1
13
août
2025

j'ai une stack *arr dans docker, les services sont bien accessible via hostname.local:<port>

je voudrais utiliser hostname.local/<service> plutot que de me rappeler quel port est pour quel service.
Donc j'essaye Traefik comme reverse proxy pour router le trafic vers différents services (Jellyfin, Radarr, Sonarr, Bazarr, etc.) via des préfixes de chemin (par exemple hostname.local/jellyfin, hostname.local/radarr).
Mes essais actuels : j'ai configuré avec découverte automatique des services Docker, des labels sur chaque service pour définir les règles de routage, des middleware (stripprefix pour retirer le préfixe, Headers personnalisés [X-Forwarded-Proto, X-Forwarded-Host, X-Forwarded-Prefix])

problème : ça ne marche pas. J'ai toujours accès hostname.local: mais quand j'essaye

hostname.local/<service> j'ai des erreurs

https://github.com/gartcimore/parr/blob/main/docker-compose.yml

services:

    ############################
    # DOCKER SOCKET PROXY
    ############################
  socket-proxy:
    image: tecnativa/docker-socket-proxy:latest
    container_name: socket-proxy
    environment:
      - CONTAINERS=1
      - SERVICES=1
      - NETWORKS=1
      - POST=0
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro
    networks:
      - socket_proxy
    restart: unless-stopped

    ############################
    # TRAEFIK
    ############################
  traefik:
    image: traefik:v3.0
    container_name: traefik
    command:
      - --api.dashboard=true
      - --api.insecure=true
      - --providers.docker=true
      - --providers.docker.endpoint=tcp://socket-proxy:2375
      - --providers.docker.exposedbydefault=false
      - --providers.docker.network=traefik
      - --entrypoints.web.address=:80
      - --entrypoints.websecure.address=:443
    ports:
      - "80:80"
      - "443:443"
      - "8081:8080"
    networks:
      - traefik
      - socket_proxy
    restart: unless-stopped

    ############################
    # PROWLARR
    ############################
  prowlarr:
    image: lscr.io/linuxserver/prowlarr:latest
    container_name: prowlarr
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=${TZ}
    volumes:
      - ${DOCKER_CONFIG_DIR}/prowlarr/data:/config
    ports:
      - 9696:9696
    networks:
      - traefik
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.prowlarr.rule=Host(`${HOSTNAME}`) && PathPrefix(`/prowlarr`)"
      - "traefik.http.routers.prowlarr.entrypoints=web"
      - "traefik.http.services.prowlarr.loadbalancer.server.port=9696"
      - "traefik.http.middlewares.prowlarr-stripprefix.stripprefix.prefixes=/prowlarr"
      - "traefik.http.middlewares.prowlarr-headers.headers.customrequestheaders.X-Forwarded-Proto=http"
      - "traefik.http.middlewares.prowlarr-headers.headers.customrequestheaders.X-Forwarded-Host=${HOSTNAME}"
      - "traefik.http.middlewares.prowlarr-headers.headers.customrequestheaders.X-Forwarded-Prefix=/prowlarr"
      - "traefik.http.routers.prowlarr.middlewares=prowlarr-headers,prowlarr-stripprefix"
    restart: unless-stopped

    ############################
    # RADARR
    ############################
  radarr:
    image: lscr.io/linuxserver/radarr:latest
    container_name: radarr
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=${TZ}
    volumes:
      - ${DOCKER_CONFIG_DIR}/radarr:/config
      - /mnt/dataYmir/:/data 
    ports:
      - 7878:7878
    networks:
      - traefik
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.radarr.rule=Host(`${HOSTNAME}`) && PathPrefix(`/radarr`)"
      - "traefik.http.routers.radarr.entrypoints=web"
      - "traefik.http.services.radarr.loadbalancer.server.port=7878"
      - "traefik.http.middlewares.radarr-stripprefix.stripprefix.prefixes=/radarr"
      - "traefik.http.middlewares.radarr-headers.headers.customrequestheaders.X-Forwarded-Proto=http"
      - "traefik.http.middlewares.radarr-headers.headers.customrequestheaders.X-Forwarded-Host=${HOSTNAME}"
      # - "traefik.http.middlewares.radarr-headers.headers.customrequestheaders.X-Forwarded-For=127.0.0.1"
      - "traefik.http.middlewares.radarr-headers.headers.customrequestheaders.X-Forwarded-Prefix=/radarr"
      - "traefik.http.routers.radarr.middlewares=radarr-headers,radarr-stripprefix"
    restart: unless-stopped

    ############################
    # SONARR
    ############################
  sonarr:
    image: lscr.io/linuxserver/sonarr:latest
    container_name: sonarr
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=${TZ}
    volumes:
      - ${DOCKER_CONFIG_DIR}/sonarr:/config
      - /mnt/dataYmir/:/data
      - /mnt/data/:/dataDrogo
    ports:
      - 8989:8989
    networks:
      - traefik
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.sonarr.rule=Host(`${HOSTNAME}`) && PathPrefix(`/sonarr`)"
      - "traefik.http.routers.sonarr.entrypoints=web"
      - "traefik.http.services.sonarr.loadbalancer.server.port=8989"
      - "traefik.http.middlewares.sonarr-stripprefix.stripprefix.prefixes=/sonarr"
      - "traefik.http.middlewares.sonarr-headers.headers.customrequestheaders.X-Forwarded-Proto=http"
      - "traefik.http.middlewares.sonarr-headers.headers.customrequestheaders.X-Forwarded-Host=${HOSTNAME}"
      - "traefik.http.middlewares.sonarr-headers.headers.customrequestheaders.X-Forwarded-Prefix=/sonarr"
      - "traefik.http.routers.sonarr.middlewares=sonarr-headers,sonarr-stripprefix"
    restart: unless-stopped

    ############################
    # BAZARR
    ############################
  bazarr:
    image: lscr.io/linuxserver/bazarr:latest
    container_name: bazarr
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=${TZ}
    volumes:
      - ${DOCKER_CONFIG_DIR}/bazarr:/config
      - /mnt/dataYmir/:/data
    ports:
      - 6767:6767
    networks:
      - traefik
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.bazarr.rule=Host(`${HOSTNAME}`) && PathPrefix(`/bazarr`)"
      - "traefik.http.routers.bazarr.entrypoints=web"
      - "traefik.http.services.bazarr.loadbalancer.server.port=6767"
      - "traefik.http.middlewares.bazarr-stripprefix.stripprefix.prefixes=/bazarr"
      - "traefik.http.middlewares.bazarr-headers.headers.customrequestheaders.X-Forwarded-Proto=http"
      - "traefik.http.middlewares.bazarr-headers.headers.customrequestheaders.X-Forwarded-Host=${HOSTNAME}"
      - "traefik.http.middlewares.bazarr-headers.headers.customrequestheaders.X-Forwarded-Prefix=/bazarr"
      - "traefik.http.routers.bazarr.middlewares=bazarr-headers,bazarr-stripprefix"
    restart: unless-stopped

    ############################
    # LIDARR
    ############################
  lidarr:
    image: lscr.io/linuxserver/lidarr:latest
    container_name: lidarr
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=${TZ}
    volumes:
      - ${DOCKER_CONFIG_DIR}/lidarr:/config
      - /mnt/dataYmir/:/data 
    ports:
      - 8686:8686
    networks:
      - traefik
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.lidarr.rule=Host(`${HOSTNAME}`) && PathPrefix(`/lidarr`)"
      - "traefik.http.routers.lidarr.entrypoints=web"
      - "traefik.http.services.lidarr.loadbalancer.server.port=8686"
      - "traefik.http.middlewares.lidarr-stripprefix.stripprefix.prefixes=/lidarr"
      - "traefik.http.middlewares.lidarr-headers.headers.customrequestheaders.X-Forwarded-Proto=http"
      - "traefik.http.middlewares.lidarr-headers.headers.customrequestheaders.X-Forwarded-Host=${HOSTNAME}"
      - "traefik.http.middlewares.lidarr-headers.headers.customrequestheaders.X-Forwarded-Prefix=/lidarr"
      - "traefik.http.routers.lidarr.middlewares=lidarr-headers,lidarr-stripprefix"
    restart: unless-stopped

   ############################
   # JELLYFIN   
   ############################

  jellyfin:
    image: lscr.io/linuxserver/jellyfin:latest
    container_name: jellyfin 
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=${TZ}
      - JELLYFIN_PublishedServerUrl=http://${HOSTNAME}/jellyfin
    volumes:
      - ${DOCKER_CONFIG_DIR}/jellyfin:/config
      - /mnt/dataYmir/media:/mediaYmir
      - /mnt/data/media:/mediaDrogo
    ports:
      - 8096:8096
      - 8920:8920 #optional
      - 7359:7359/udp #optional
      - 1900:1900/udp #optional
    networks:
      - traefik
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.jellyfin.rule=Host(`${HOSTNAME}`) && (PathPrefix(`/jellyfin`))"
      - "traefik.http.routers.jellyfin.entrypoints=web"
      - "traefik.http.services.jellyfin.loadbalancer.server.port=8096"
      - "traefik.http.middlewares.jellyfin-stripprefix.stripprefix.prefixes=/jellyfin"
      - "traefik.http.middlewares.jellyfin-headers.headers.customrequestheaders.X-Forwarded-Proto=http"
      - "traefik.http.middlewares.jellyfin-headers.headers.customrequestheaders.X-Forwarded-Host=${HOSTNAME}"
      # - "traefik.http.middlewares.jellyfin-headers.headers.customrequestheaders.X-Forwarded-For=127.0.0.1"
      - "traefik.http.middlewares.jellyfin-headers.headers.customrequestheaders.X-Forwarded-Prefix=/jellyfin"
      - "traefik.http.routers.jellyfin.middlewares=jellyfin-headers,jellyfin-stripprefix"
    restart: unless-stopped

    ############################
    # JELLYSEER
    ############################
  jellyseer:
    image: fallenbagel/jellyseerr:latest
    container_name: jellyseer
    environment:
      - LOG_LEVEL=debug
      - TZ=${TZ}
    volumes:
      - ${DOCKER_CONFIG_DIR}/jellyseer:/app/config
    ports:
      - 5055:5055
    networks:
      - traefik
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.jellyseer.rule=Host(`${HOSTNAME}`) && PathPrefix(`/jellyseer`)"
      - "traefik.http.routers.jellyseer.entrypoints=web"
      - "traefik.http.services.jellyseer.loadbalancer.server.port=5055"
      - "traefik.http.middlewares.jellyseer-stripprefix.stripprefix.prefixes=/jellyseer"
      - "traefik.http.middlewares.jellyseer-headers.headers.customrequestheaders.X-Forwarded-Proto=http"
      - "traefik.http.middlewares.jellyseer-headers.headers.customrequestheaders.X-Forwarded-Host=${HOSTNAME}"
      - "traefik.http.middlewares.jellyseer-headers.headers.customrequestheaders.X-Forwarded-Prefix=/jellyseer"
      - "traefik.http.routers.jellyseer.middlewares=jellyseer-headers,jellyseer-stripprefix"
    restart: unless-stopped

    ############################
    # HOMARR
    ############################
  homarr:
      image: ghcr.io/homarr-labs/homarr:latest
      container_name: homarr
      environment:
        - SECRET_ENCRYPTION_KEY=${HOMARR_SECRET_KEY}
      volumes:
        - /var/run/docker.sock:/var/run/docker.sock # Optional, only if you want docker integration
        - ${DOCKER_CONFIG_DIR}/homarr:/appdata
      ports:
        - '7575:7575'
      networks:
        - traefik
      labels:
        - "traefik.enable=true"
        - "traefik.http.routers.homarr.rule=Host(`${HOSTNAME}`) && PathPrefix(`/homarr`)"
        - "traefik.http.routers.homarr.entrypoints=web"
        - "traefik.http.services.homarr.loadbalancer.server.port=7575"
        - "traefik.http.middlewares.homarr-stripprefix.stripprefix.prefixes=/homarr"
        - "traefik.http.middlewares.homarr-headers.headers.customrequestheaders.X-Forwarded-Proto=http"
        - "traefik.http.middlewares.homarr-headers.headers.customrequestheaders.X-Forwarded-Host=${HOSTNAME}"
        - "traefik.http.middlewares.homarr-headers.headers.customrequestheaders.X-Forwarded-For=127.0.0.1"
        - "traefik.http.middlewares.homarr-headers.headers.customrequestheaders.X-Forwarded-Prefix=/homarr"
        - "traefik.http.routers.homarr.middlewares=homarr-headers,homarr-stripprefix"
      restart: unless-stopped

    ############################
    # GLUETUN
    ############################

  gluetun:
    image: qmcgaw/gluetun:v3
    container_name: gluetun
    cap_add:
      - NET_ADMIN
    devices:
      - /dev/net/tun:/dev/net/tun
    ports:
      - 8080:8080/tcp # qbittorrent
    environment:
      - TZ=${TZ}
      - UPDATER_PERIOD=24h
      - VPN_SERVICE_PROVIDER=protonvpn
      - VPN_TYPE=${VPN_TYPE}
      - BLOCK_MALICIOUS=off
      - OPENVPN_USER=${OPENVPN_USER}
      - OPENVPN_PASSWORD=${OPENVPN_PASSWORD}
      - OPENVPN_CIPHERS=AES-256-GCM
      - WIREGUARD_PRIVATE_KEY=${WIREGUARD_PRIVATE_KEY}
      - PORT_FORWARD_ONLY=on
      - VPN_PORT_FORWARDING=on
      - VPN_PORT_FORWARDING_UP_COMMAND=/bin/sh -c 'wget -O- --retry-connrefused --post-data "json={\"listen_port\":{{PORTS}}}" http://127.0.0.1:8080/api/v2/app/setPreferences 2>&1'
      - SERVER_COUNTRIES=${SERVER_COUNTRIES}
    volumes:
      - ${DOCKER_CONFIG_DIR}/gluetun:/gluetun
    networks:
      - traefik
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.qbittorrent.rule=Host(`${HOSTNAME}`) && PathPrefix(`/qbittorrent`)"
      - "traefik.http.routers.qbittorrent.entrypoints=web"
      - "traefik.http.services.qbittorrent.loadbalancer.server.port=8080"
      - "traefik.http.middlewares.qbittorrent-stripprefix.stripprefix.prefixes=/qbittorrent"
      - "traefik.http.routers.qbittorrent.middlewares=qbittorrent-stripprefix"
    restart: unless-stopped


    ############################
    # QBITTORRENT       
    ############################
  qbittorrent:
    image: lscr.io/linuxserver/qbittorrent:latest
    container_name: qbittorrent
    depends_on:
      gluetun:
        condition: service_healthy
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=${TZ}
      - WEBUI_PORT=8080
    volumes:
      - ${DOCKER_CONFIG_DIR}/qbittorent:/config
      - ${MEDIA_DIR}/downloads:/downloads
    restart: unless-stopped
    network_mode: "service:gluetun"

    ############################
    # NETWORKS
    ############################
    networks:
      traefik:
        driver: bridge
        external: false
      socket_proxy:
        driver: bridge
        internal: true
        external: false
  • # et sinon ?

    Posté par  . Évalué à 5 (+2/-0). Dernière modification le 13 août 2025 à 16:29.

    note que je n'y connais pas grand chose en docker et traefik

    mais l'experience fait qu'on arrive à se debrouiller

    problème : ça ne marche pas. J'ai toujours accès hostname.local: mais quand j'essaye hostname.local/ j'ai des erreurs

    mais quelles sont ces erreurs ?

    est-ce que ce ne serait pas que tes services attendent un nom du style https://monsonarr.local
    plutot que https://hostname.local ?

    je vois que tu definis des entrypoint dans traefik pour web et websecure
    mais que n'utilise que web dans tes services

    xxx.yyy.entrypoints=web

    si ton navigateur ajoute lui meme https://
    au mieux tu tombes sur traefik, mais il n'a pas de regle pour aller plus loin

    • [^] # Re: et sinon ?

      Posté par  . Évalué à 2 (+1/-0).

      il reste le websecure parce que j'étais parti super confiant et je pensais pouvoir faire ça facilement et forcer https. Ce sera la prochaine étape

      Les erreurs étaient un peu diverse, j'avais globalement des 404 mais pas tout le temps.
      J'avais car j'ai finalement trouvé qu'il y a un paramètre "baseurl" dans les *arr, j'ai donc retirer le middleware stripprefix et ajouté une baseurl à chaque service, ça marche pour presque tous

Envoyer un commentaire

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.