Traefik not finding my services since upgrading Docker Desktop v4.42

Had one of my devs report that he was getting a 404 on his local dev environment. It looked like the standard 404 page that Traefik serves if it can't find the service it's supposed to be routing to. Looking in the traefik logs, he had this line:

2025-06-05T16:56:56Z ERR github.com/traefik/traefik/v3/pkg/provider/docker/config.go:82 > error="service \"php-local\" error: port is missing" container=php-local-e202e95115b39285efa98f61a93bdb351455a4a64c6867471805009424b75883 providerName=docker

It was working for me. So I went through his Docker settings and discovered he was running a slightly newer version of Docker Desktop (both of us on Mac M1 Apple Silicon). So I updated my version of Docker and boom, mine broke too. Reverting back solves the issue.

Just wondering if there is anything I could possibly try on the Traefik end to resolve this issue. For reference, the services that are missing are running on ports 8080 and 8443. All my configuration is in docker-compose.yml. Relevant bits below:

services:
  traefik:
    image: traefik:v3.4
    command:
      - "--log.level=DEBUG"
      - "--api.insecure=true"
      - "--providers.docker=true"
      - "--providers.docker.exposedbydefault=false"
      - "--providers.file.directory=/etc/traefik/dynamic"
      - "--providers.file.watch=true"
      - "--entrypoints.web.address=:80"
      - "--entrypoints.websecure.address=:443"
    ports:
      - "8080:8080"
      - "80:80"
      - "443:443"
php-local:
    hostname: php-local.dev
    container_name: php-local
    expose:
      - "8443"
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.php.rule=Host(`php-local.dev`)"
      - "traefik.http.routers.php.entrypoints=websecure"
      - "traefik.http.routers.php.tls.domains[0].main=php-local.dev"

You don’t really need the domain (main), when you already have it in Host().

Have you tried setting the port explicitly instead of relying on expose? From simple Traefik example:

    labels:
      - traefik.enable=true
      - traefik.http.routers.mywhoami.rule=Host(`whoami.example.com`)
      - traefik.http.services.mywhoami.loadbalancer.server.port=80

I did try that, but got bad gateway. However, wasn't sure whether I should set it to the incoming port (80 or 443) or the container exposed port (8080 or 8443). I tested with the exposed port and got the Bad Gateway response.

However, looks like there is an actual issue with the new version of docker on mac. I raised the issue there also and had a couple of responses from people with the same problem:

Further to this, adding the label as mentioned - traefik.http.services.mywhoami.loadbalancer.server.port=80 does clear the error in the logs and all services are now visible in the Traefik dashboard. However, I do still get a Bad Gateway message if I actually try and visit the site. So it hides the issue from traefik, but doesn't resolve the underlying Docker issue.

.loadbalancer.server.port=80

tells Traefik the port to use inside the container, which the app/process is listening on.

For anyone else seeing an issue, it was indeed a bug in docker, but there is a fix release via the Docker Github Issue link above. Newer versions than 4.42.0 should also contain the fix.

This topic was automatically closed 3 days after the last reply. New replies are no longer allowed.