Traefik dashboard behind load balancer with path getting 404

On my hosting provider I've setup a load balancer that will handle the SSL certificate. I've setup a domain name, api.example.nl that points to that load balancer.

The load balancer is connected to a server running docker swarm and I've setup a traefik container:

services:
  traefik:
    image: traefik:v3.3.0
    hostname: '{{.Node.Hostname}}'
    deploy:
      placement:
        constraints:
          - node.role == manager
      mode: global
      labels:
        - traefik.enable=true
        - traefik.http.routers.dashboard.rule=Host(`api.example.nl`) && Path(`/traefik`)
        - traefik.http.routers.dashboard.service=api@internal
        - traefik.http.routers.dashboard.middlewares=auth
        - traefik.http.middlewares.auth.basicauth.users=example:$$apr1$$LYLCV6G2$$z9BY.rQzoXsXe/18dEBoq/
        - traefik.http.services.dashboard.loadbalancer.server.port=9999
    volumes:
        - /var/run/docker.sock:/var/run/docker.sock:ro
    ports:
      - target: 80
        published: 80
        protocol: tcp
        mode: host
    networks:
      - traefik_proxy
    command:
      - --log.level=DEBUG
      - --api.dashboard=true
      - --accesslog=true
      - --providers.swarm.network=traefik_proxy
      - --providers.swarm.exposedByDefault=false
      - --entrypoints.http.address=:80

networks:
  traefik_proxy:
    external: true

When I go to https://api.example.nl/traefik it does asks for credentials. When I login, I get a 404 page not found message displayed.

However, when I change

- traefik.http.routers.dashboard.rule=Host(`api.example.nl`) && Path(`/traefik`)

to

- traefik.http.routers.dashboard.rule=Host(`traefik.example.nl`)`

I get the dashboard at traefik.example.nl.

Both subdomains do point to the same IP address of the load balancer and the load balancer has successfully added the SSL certificates from LetsEncrypt.

So why do I get a 404 error with api.example.nl and path /traefik and how do I fix it?

Because the Traefik dashboard application is programmed to have the dashboard available at /dashboard, and it needs /api (doc). If you use other paths, which are unknown to the application, it will simply return 404.


    volumes:
        - /var/run/docker.sock:/var/run/docker.sock:ro

Note that this has no "ro" effect, as it's a socket connection. The application with access to the socket can always GET, POST and DELETE anything. It can read secrets, create new containers and delete others.