UncountedBrute
UncountedBrute

Reputation: 506

Traefik routing one application to port 80, others require explicit port

I have an environment running docker containers. This environment hosts Traefik, Nextcloud, MotionEye and Heimdall. I also have another environment running CoreDNS in a docker container. For some reason, I can get MotionEye to be accessible from motioneye.docker.swarm (changed the domain in here for privacy). However, for nextcloud and Heimdall, I have to explicitly access the ports and I'm struggling to tell why. e.g. Heimdall is gateway.docker.swarm:8091 when should be gateway.docker.swarm

When a user requests a webpage onto the local dns server X.X.X.117 it gets routed through to the traefik instance on X.X.X.106.

My traefik compose file is as follows:

version: '3'

services:
  reverse-proxy:
    # The official v2 Traefik docker image
    image: traefik:v2.3
    restart: always
    # Enables the web UI and tells Traefik to listen to docker
    command: --api.insecure=true --providers.docker
    ports:
      # The HTTP port
      - "80:80"
      # The Web UI (enabled by --api.insecure=true)
      - "8080:8080"
    volumes:
      # So that Traefik can listen to the Docker events
      - /var/run/docker.sock:/var/run/docker.sock
    labels:
      - "traefik.port=8080"
      - "traefik.backend=traefik"
      - "traefik.frontend.rule=Host:traefik.docker.swarm"
      - "traefik.docker.network=traefik_default"

My Heimdall compose is as follows:

version: "3"
services:
  heimdall:
    image: ghcr.io/linuxserver/heimdall
    container_name: heimdall
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=Europe/London
    volumes:
      - /home/pi/heimdall/config:/config
    ports:
      - 8091:80
    restart: unless-stopped
    networks:
      - heimdall
    labels:
      - "traefik.enable=true"
      - "traefik.port=8091"
      - "traefik.http.routers.heimdall.entrypoints=http"
      - "traefik.http.routers.heimdall.rule=Host(`gateway.docker.swarm`)"
networks:
  heimdall:
    external:
      name: heimdall

Can anyone see what I'm doing wrong here?

Upvotes: 0

Views: 4142

Answers (1)

When you access through gateway.docker.swarm:8091 it works because you are accessing the heimdall container directly. This is possible because you defined

ports:
  - 8091:80

in your docker-compose.

In order to access through traefik they must be on the same network. Also, remove the port mapping if you like this container to be only accessible through traefik. And finally correct the traefik port accordingly.

version: "3"
services:
  heimdall:
    image: ghcr.io/linuxserver/heimdall
    container_name: heimdall
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=Europe/London
    volumes:
      - /home/pi/heimdall/config:/config
    restart: unless-stopped
    labels:
      - "traefik.enable=true"
      - "traefik.port=80"
      - "traefik.http.routers.heimdall.entrypoints=http"
      - "traefik.http.routers.heimdall.rule=Host(`gateway.docker.swarm`)"

Upvotes: 3

Related Questions