Traefik 2.0 Swarm not working with Services on Ports

I created a simple working example (no swarm, no let's encrypt, no file):

version: "3"

services:

  traefik:
    image: traefik:v2.0.0
    ports:
      - "80:80"
      - "443:443"
    command:
      - --global.checkNewVersion=true
      - --global.sendAnonymousUsage=true
      - --entryPoints.web.address=:80
      - --entryPoints.websecure.address=:443
      - --log.level=DEBUG
      - --api
      - --ping
      # - --certificatesResolvers.letsencrypt.acme.email="email@example.tld"
      # - --certificatesResolvers.letsencrypt.acmestorage="acme.json"
      # - --certificatesResolvers.letsencrypt.acme.dnsChallenge.provider="netcup"
      - --providers.docker.exposedByDefault=false
      # - --providers.docker.watch=true
      # - --providers.docker.swarmMode=true
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    labels:
      - "traefik.enable=true"
      
      - "traefik.http.routers.traefik_https.rule=Host(`dashboard.docker.localhost`)"
      - "traefik.http.routers.traefik_https.entrypoints=websecure"
      - "traefik.http.routers.traefik_https.tls=true"
      # - "traefik.http.routers.traefik_https.tls.certResolver=letsencrypt"
      - "traefik.http.routers.traefik_https.service=api@internal"
      - "traefik.http.routers.traefik_https.middlewares=traefik-auth"

      # - "traefik.http.services.noop.loadbalancer.server.port=888" # required only for swarm

      - "traefik.http.middlewares.traefik-auth.basicauth.users=admin:$$apr1$$iNdRs1II$$Qdw59WFY6y0Oaf0JaZTip0"

      - "traefik.http.routers.http_traefik.rule=Host(`dashboard.docker.localhost`)"
      - "traefik.http.routers.http_traefik.entrypoints=web"
      - "traefik.http.routers.http_traefik.middlewares=https_redirect"

      - "traefik.http.middlewares.https_redirect.redirectscheme.scheme=https"
      - "traefik.http.middlewares.https_redirect.redirectscheme.permanent=true"

  whoami:
    image: containous/whoami:v1.3.0
    labels:
      - "traefik.enable=true"
      
      - "traefik.http.routers.whoami_http.rule=Host(`whoami.docker.localhost`)"
      - "traefik.http.routers.whoami_http.entrypoints=web"
      - "traefik.http.routers.whoami_http.middlewares=redirect-https-whoami"

      - "traefik.http.middlewares.redirect-https-whoami.redirectscheme.scheme=https"

      - "traefik.http.routers.whoami_https.rule=Host(`whoami.docker.localhost`)"
      - "traefik.http.routers.whoami_https.entrypoints=websecure"
      - "traefik.http.routers.whoami_https.tls=true"
      # - "traefik.http.routers.whoami_https.tls.certResolver=letsencrypt"
      
      - "traefik.http.services.whoami.loadbalancer.server.port=80"

  • dashboard.docker.localhost serve the Traefik dashboard with auto-signed certificates
  • whoami.docker.localhost serve the whoami with auto-signed certificates

tried to inspire you with that.

2 Likes