404 not found but everything else looks fine with Traefik v2

Hi,

I'm trying (for the first time but carefully reading the doc) to set up Traefik v2 with Docker.
I have two services in my docker-compose.yml: Traefik and the whoami simple service. I managed to make the dashboard work (through an IP address from my local network) but I can't connect to the whoami service. Here the details:

Traefik version: 2.0.1
Docker version: 19.03.2-ce

docker-compose.yml

version: '3'

services:
        traefik:
                image: traefik:v2.0.1
                restart: always
                ports:
                        - 80:80
                        - 443:443
                        - 8080:8080
                volumes:
                        - /var/run/docker.sock:/var/run/docker.sock:ro
                container_name: traefik
                networks:
                        - myweb
                command:
                        - "--log.level=info"
                        - "--api.insecure=true"
                        - "--providers.docker=true"
                        - "--providers.docker.exposedByDefault=false"
                        - "--entrypoints.web.address=:80"
                        - "--entrypoints.websecure.address=:443"
        whoami:
                image: containous/whoami
                container_name: "simple-service"
                networks:
                        - myweb
                labels:
                        - "traefik.enable=true"
                        - "traefik.http.routers.whoami.rule=Host(`my.working.domain.com`)"
                        - "traefik.http.routers.whoami.entrypoints=web,websecure"

networks:
        myweb:
                external: true

And here is a

{
  "routers": {
    "whoami@docker": {
      "entryPoints": [
        "web",
        "websecure"
      ],
      "service": "whoami-front",
      "rule": "Host(`my.working.domain.com`)",
      "status": "enabled",
      "using": [
        "web",
        "websecure"
      ]
    }
  },
  "services": {
    "whoami-front@docker": {
      "loadBalancer": {
        "servers": [
          {
            "url": "http://172.25.0.2:80"
          }
        ],
        "passHostHeader": true
      },
      "status": "enabled",
      "usedBy": [
        "whoami@docker"
      ],
      "serverStatus": {
        "http://172.25.0.2:80": "UP"
      }
    }
  }
}

No error at startup, but always a 404 not found output…
Any leads?

Hello,

in the v2 TLS in on the router: https://docs.traefik.io/v2.0/routing/routers/#tls

version: '3'

services:
  traefik:
    image: traefik:v2.0.1
    restart: always
    ports:
      - 80:80
      - 443:443
      - 8080:8080
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro
    container_name: traefik
    networks:
      - myweb
    command:
      - "--log.level=info"
      - "--api.insecure=true"
      - "--providers.docker=true"
      - "--providers.docker.exposedByDefault=false"
      - "--entrypoints.web.address=:80"
      - "--entrypoints.websecure.address=:443"
  whoami:
    image: containous/whoami
    container_name: "simple-service"
    networks:
      - myweb
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.whoami.rule=Host(`my.working.domain.com`)"
      - "traefik.http.routers.whoami.entrypoints=web"
      - "traefik.http.routers.whoamitls.rule=Host(`my.working.domain.com`)"
      - "traefik.http.routers.whoamitls.entrypoints=websecure"
      - "traefik.http.routers.whoamitls.tls=true"

networks:
  myweb:
    external: true

Thanks a lot for your fast reply. Unfortunately… this doesn't solve my problem. I guess for testing purposes it is possible not to use TLS right?

Here's the debug log when I start the service, in case that helps:

Starting simple-service ... done
Starting traefik        ... done
Attaching to simple-service, traefik
simple-service | Starting up on port 80
traefik    | time="2019-09-27T20:51:27Z" level=info msg="Configuration loaded from flags."
traefik    | time="2019-09-27T20:51:27Z" level=info msg="Traefik version 2.0.1 built on 2019-09-26T16:18:03Z"
traefik    | time="2019-09-27T20:51:27Z" level=debug msg="Static configuration loaded {\"global\":{\"checkNewVersion\":true},\"serversTransport\":{\"maxIdleConnsPerHost\":200},\"entryPoints\":{\"traefik\":{\"address\":\":8080\",\"transport\":{\"lifeCycle\":{\"graceTimeOut\":10000000000},\"respondingTimeouts\":{\"idleTimeout\":180000000000}},\"forwardedHeaders\":{}},\"web\":{\"address\":\":80\",\"transport\":{\"lifeCycle\":{\"graceTimeOut\":10000000000},\"respondingTimeouts\":{\"idleTimeout\":180000000000}},\"forwardedHeaders\":{}},\"websecure\":{\"address\":\":443\",\"transport\":{\"lifeCycle\":{\"graceTimeOut\":10000000000},\"respondingTimeouts\":{\"idleTimeout\":180000000000}},\"forwardedHeaders\":{}}},\"providers\":{\"providersThrottleDuration\":2000000000,\"docker\":{\"watch\":true,\"endpoint\":\"unix:///var/run/docker.sock\",\"defaultRule\":\"Host(`{{ normalize .Name }}`)\",\"swarmModeRefreshSeconds\":15000000000}},\"api\":{\"insecure\":true,\"dashboard\":true},\"log\":{\"level\":\"debug\",\"filePath\":\"/dev/stdout\",\"format\":\"common\"}}"
traefik    | time="2019-09-27T20:51:27Z" level=info msg="\nStats collection is disabled.\nHelp us improve Traefik by turning this feature on :)\nMore details on: https://docs.traefik.io/v2.0/contributing/data-collection/\n"
traefik    | time="2019-09-27T20:51:27Z" level=debug msg="No default certificate, generating one"
traefik    | time="2019-09-27T20:51:27Z" level=info msg="Starting provider aggregator.ProviderAggregator {}"
traefik    | time="2019-09-27T20:51:27Z" level=debug msg="Start TCP Server" entryPointName=traefik
traefik    | time="2019-09-27T20:51:27Z" level=debug msg="Start TCP Server" entryPointName=web
traefik    | time="2019-09-27T20:51:27Z" level=debug msg="Start TCP Server" entryPointName=websecure
traefik    | time="2019-09-27T20:51:27Z" level=info msg="Starting provider *docker.Provider {\"watch\":true,\"endpoint\":\"unix:///var/run/docker.sock\",\"defaultRule\":\"Host(`{{ normalize .Name }}`)\",\"swarmModeRefreshSeconds\":15000000000}"
traefik    | time="2019-09-27T20:51:27Z" level=debug msg="Provider connection established with docker 19.03.2-ce (API 1.40)" providerName=docker
traefik    | time="2019-09-27T20:51:27Z" level=debug msg="Filtering disabled container" providerName=docker container=traefik-front-1a4fae939e5a7fed4393da842f3bf542602ee3e42900cb34436fa725575fc5de
traefik    | time="2019-09-27T20:51:27Z" level=debug msg="Configuration received from provider docker: {\"http\":{\"routers\":{\"whoami\":{\"entryPoints\":[\"web\"],\"service\":\"whoami-front\",\"rule\":\"Host(`still.my.working.domain.com`)\"},\"whoamitls\":{\"entryPoints\":[\"websecure\"],\"service\":\"whoami-front\",\"rule\":\"Host(`still.my.working.domain.com`)\",\"tls\":{}}},\"services\":{\"whoami-front\":{\"loadBalancer\":{\"servers\":[{\"url\":\"http://172.25.0.2:80\"}],\"passHostHeader\":true}}}},\"tcp\":{}}" providerName=docker
traefik    | time="2019-09-27T20:51:27Z" level=debug msg="Creating middleware" middlewareType=Pipelining serviceName=whoami-front entryPointName=web routerName=whoami@docker middlewareName=pipelining
traefik    | time="2019-09-27T20:51:27Z" level=debug msg="Creating load-balancer" serviceName=whoami-front entryPointName=web routerName=whoami@docker
traefik    | time="2019-09-27T20:51:27Z" level=debug msg="Creating server 0 http://172.25.0.2:80" entryPointName=web routerName=whoami@docker serviceName=whoami-front serverName=0
traefik    | time="2019-09-27T20:51:27Z" level=debug msg="Added outgoing tracing middleware whoami-front" entryPointName=web routerName=whoami@docker middlewareName=tracing middlewareType=TracingForwarder
traefik    | time="2019-09-27T20:51:27Z" level=debug msg="Creating middleware" entryPointName=web middlewareType=Recovery middlewareName=traefik-internal-recovery
traefik    | time="2019-09-27T20:51:27Z" level=debug msg="Creating middleware" middlewareName=pipelining middlewareType=Pipelining routerName=whoamitls@docker serviceName=whoami-front entryPointName=websecure
traefik    | time="2019-09-27T20:51:27Z" level=debug msg="Creating load-balancer" entryPointName=websecure routerName=whoamitls@docker serviceName=whoami-front
traefik    | time="2019-09-27T20:51:27Z" level=debug msg="Creating server 0 http://172.25.0.2:80" serviceName=whoami-front serverName=0 entryPointName=websecure routerName=whoamitls@docker
traefik    | time="2019-09-27T20:51:27Z" level=debug msg="Added outgoing tracing middleware whoami-front" middlewareType=TracingForwarder routerName=whoamitls@docker entryPointName=websecure middlewareName=tracing
traefik    | time="2019-09-27T20:51:27Z" level=debug msg="Creating middleware" entryPointName=websecure middlewareName=traefik-internal-recovery middlewareType=Recovery
traefik    | time="2019-09-27T20:51:27Z" level=debug msg="No default certificate, generating one"

I don't have any log output when I try to visit the IP or domain of my machine, is this normal?

Many thanks again :slight_smile:

version: '3'

services:
  traefik:
    image: traefik:v2.0.1
    restart: always
    ports:
      - 80:80
      - 443:443
      - 8080:8080
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro
    command:
      - "--log.level=DEBUG"
      - "--api.insecure=true"
      - "--providers.docker=true"
      - "--providers.docker.exposedByDefault=false"
      - "--entrypoints.web.address=:80"
      - "--entrypoints.websecure.address=:443"

  whoami:
    image: containous/whoami
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.whoami.rule=Host(`whoami.docker.localhost`)"
      - "traefik.http.routers.whoami.entrypoints=web"
      - "traefik.http.routers.whoamitls.rule=Host(`whoami.docker.localhost`)"
      - "traefik.http.routers.whoamitls.entrypoints=websecure"
      - "traefik.http.routers.whoamitls.tls=true"

on http://whoami.docker.localhost you have the non TLS whoami

on https://whoami.docker.localhost you have the TLS whoami (self-signed cert)

Ok your reply assured me that my configuration on the Traefik and Docker side was working.
My problem was that I have an Apache2 reverse-proxy server on another machine, forwarding the requests to a certain domain, to the machine where Traefik is installed. And the Host headers were not passed. :man_facepalming:

Using ProxyPreserveHost on in my VirtualHost section did the trick.

Thanks @ldez for the help!