Search code examples
docker-composetraefiktraefik-ingress

Traefik: Simple Letsencrypt HTTPS redirect to whoami service throws "404 page not found"


I've tried to get this up and running for two days now and some simple HTTP -> HTTPs redirect does not work! :(

Pretty simple use case:

whoami.my-example-domain.com:80 => redirect to whoami.my-example-domain.com:443 and then traefik internally redirects to :80 of my whoami service docker container.

Here's the docker-compose.yml

version: "3"
services:
  reverse-proxy:
image: traefik:alpine
command:
  - --logLevel=WARN
  - --defaultentrypoints=http,https
  - --entrypoints=Name:http Address::80 Redirect.EntryPoint:https
  - --entrypoints=Name:https Address::443 TLS
  - --acme
  - --acme.email=myemail@gmail.com
  - --acme.storage=acme.json
  - --acme.entryPoint=https
  - --acme.httpChallenge.entryPoint=http
  - --acme.OnHostRule=true
  - --acme.onDemand=false
  - --acme.acmeLogging=true
  - --docker
  - --docker.watch
  - --docker.exposedbydefault=false
  - --docker.domain=docker.localhost
restart: always
networks:
  - web
ports:
  - "80:80"     # The HTTP port
  - "443:443"   # The HTTPS port
volumes:
  - /var/run/docker.sock:/var/run/docker.sock # So that Traefik can listen to the Docker events
  - /opt/data/traefik/acme.json:/acme.json
  whoami:
image: containous/whoami  # A container that exposes an API to show its IP address
labels:
  - "traefik.enable=true"
  - "traefik.frontend.rule=Host:whoami.some-example-domain.com"
  - "traefik.port=80"
  - "traefik.frontend.entryPoints=http"
networks:
  web:
    external: true

When I now call http://whoami.some-example-domain.com (this is just a demo domain and won't work) => it redirects to HTTPs... which is cool, but then it throws the famous "404 page not found" traefik standard error.

If already tried to set the following labels to the container:

  • "traefik.port=80"
  • "traefik.frontend.entryPoints=http"

That didn't work either.

Any help would be appreciated! Thanks in advance!

Regards,

Sascha


Solution

  • You have to remove traefik.frontend.entryPoints (linked to defaultentrypoints) or use traefik.frontend.entryPoints=http,https

    version: "3"
    
    services:
      reverse-proxy:
        image: traefik:v1.7.8
        command:
          - --logLevel=WARN
          - --defaultentrypoints=http,https
          - --entrypoints=Name:http Address::80 Redirect.EntryPoint:https
          - --entrypoints=Name:https Address::443 TLS
          - --acme
          - --acme.email=myemail@gmail.com
          - --acme.storage=acme.json
          - --acme.entryPoint=https
          - --acme.httpChallenge.entryPoint=http
          - --acme.OnHostRule=true
          - --acme.onDemand=false
          - --acme.acmeLogging=true
          - --docker
          - --docker.exposedbydefault=false
          - --docker.domain=some-example-domain.com
        restart: always
        networks:
          - web
        ports:
          - "80:80"     # The HTTP port
          - "443:443"   # The HTTPS port
        volumes:
          - /var/run/docker.sock:/var/run/docker.sock # So that Traefik can listen to the Docker events
          - /opt/data/traefik/acme.json:/acme.json
      whoami:
        image: containous/whoami  # A container that exposes an API to show its IP address
        labels:
          - "traefik.enable=true"
          - "traefik.frontend.rule=Host:some-example-domain.com"
        networks:
         - web
    
    networks:
      web:
        external: true