Traefik 3 + Swarm: error="field not found, node: http:routers"

Hello! THat's my static config:

version: '3'

services:
  reverse-proxy:
    image: traefik:v3.1
    # TODO: переделать это на yml-конфиг, но для этого нужно собирать свой образ
    command:
      - "--entrypoints.web.address=:80"
      - "--entrypoints.websecure.address=:443"
      - "--api.insecure=true"
      - "--providers.swarm.endpoint=unix:///var/run/docker.sock"
      - "--providers.swarm.exposedbydefault=false"
      - "--providers.swarm.network=proxynet"
      - "--log.level=DEBUG"
    ports:
      - "80:80"
      - "8080:8080"
      - "443:443"
    networks:
      - proxynet
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro

networks:
  proxynet:
    external: true

My dynamic labels on service:

version: "3"
services:
  nginx-hello:
    image: nginxdemos/hello
    networks:
      - proxynet
    deploy:
      replicas: 3
      labels:
        - "traefik.enable=true"
        - "traefik.http:routers.nginx-hello.rule=Host(`my-domain.com`)"
        - "traefik.http.routers.nginx-hello.entrypoints=web"
        - "traefik.http.services.nginx-hello-service.loadbalancer.server.port=80"
networks:
  proxynet:
    external: true

After

docker stack deploy -c ./stack.yml --with-registry-auth $STACK_NAME

I get this error:

traefik_reverse-proxy.1.knehflcsz5i0@prod-netmonitor | 2024-10-09T05:07:59Z ERR github.com/traefik/traefik/v3/pkg/provider/docker/config.go:45 > error="field not found, node: http:routers" container=nginx-test-nginx-hello-i7z8mtc9pk5n6d8k8sfwuhqhc providerName=swarm
traefik_reverse-proxy.1.knehflcsz5i0@prod-netmonitor | 2024-10-09T05:07:59Z ERR github.com/traefik/traefik/v3/pkg/provider/docker/config.go:45 > error="field not found, node: http:routers" container=nginx-test-nginx-hello-l3wn902p7lms6pz05oq99jabk providerName=swarm
traefik_reverse-proxy.1.knehflcsz5i0@prod-netmonitor | 2024-10-09T05:07:59Z ERR github.com/traefik/traefik/v3/pkg/provider/docker/config.go:45 > error="field not found, node: http:routers" container=nginx-test-nginx-hello-u3f9sshp3112wrgppb4n917wv providerName=swarm

$ docker ps:

CONTAINER ID   IMAGE                                                COMMAND                  CREATED          STATUS          PORTS                 NAMES
c4a45bf1824c   nginxdemos/hello:latest                              "/docker-entrypoint.…"   2 minutes ago    Up 2 minutes    80/tcp                nginx-test_nginx-hello.2.u3f9sshp3112wrgppb4n917wv
a6613991edf5   nginxdemos/hello:latest                              "/docker-entrypoint.…"   2 minutes ago    Up 2 minutes    80/tcp                nginx-test_nginx-hello.3.l3wn902p7lms6pz05oq99jabk
1ac41377307e   nginxdemos/hello:latest                              "/docker-entrypoint.…"   2 minutes ago    Up 2 minutes    80/tcp                nginx-test_nginx-hello.1.i7z8mtc9pk5n6d8k8sfwuhqhc

$ docker network inspect proxynet:

[
    {
        "Name": "proxynet",
        "Id": "i578jljxi1gcqzgixbyxtf2su",
        "Created": "2024-10-09T02:19:54.971944434Z",
        "Scope": "swarm",
        "Driver": "overlay",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": null,
            "Config": [
                {
                    "Subnet": "10.0.3.0/24",
                    "Gateway": "10.0.3.1"
                }
            ]
        },
        "Internal": false,
        "Attachable": true,
        "Ingress": false,
        "ConfigFrom": {
            "Network": ""
        },
        "ConfigOnly": false,
        "Containers": {
            "1ac41377307eb4c540f20f262d101e6aa700d6e47f69ec67900cf7699006fc84": {
                "Name": "nginx-test_nginx-hello.1.i7z8mtc9pk5n6d8k8sfwuhqhc",
                "EndpointID": "670a2fec3bef9972641b57a5a7a4b7a0a1672dfb26e9635c383794119a54aaed",
                "MacAddress": "02:42:0a:00:03:23",
                "IPv4Address": "10.0.3.35/24",
                "IPv6Address": ""
            },
            "2ad09cdb74e17c536f97cb8afdb096fdfe27f03a00d393b81c45ba9d4d1aec9e": {
                "Name": "netmonitor_mysql.1.yrnk9udwrocdaykzxxmz1uprz",
                "EndpointID": "e5f569dba3ed6043a745cebbf11dcee1d17bd4c250fd2a936ccd72eba31c2bd1",
                "MacAddress": "02:42:0a:00:03:02",
                "IPv4Address": "10.0.3.2/24",
                "IPv6Address": ""
            },
            "34fa81e21d3cdd2f5a9ae13af65c7db09d8fd252fd626aa6d818a1a0a4ec583c": {
                "Name": "traefik_reverse-proxy.1.knehflcsz5i0tprl5gxwrhivq",
                "EndpointID": "181634edf945f9a3f91bc6cba266e2e6dff1e8f1baf73fadc59c036973d5380a",
                "MacAddress": "02:42:0a:00:03:19",
                "IPv4Address": "10.0.3.25/24",
                "IPv6Address": ""
            },
            "a6613991edf53e8420659749622b14d33839962963a1976bb324ca4b42137f01": {
                "Name": "nginx-test_nginx-hello.3.l3wn902p7lms6pz05oq99jabk",
                "EndpointID": "15ee61bb1b234269464bd2bde696e564881319e616a7dc503216457318f84d1c",
                "MacAddress": "02:42:0a:00:03:25",
                "IPv4Address": "10.0.3.37/24",
                "IPv6Address": ""
            },
            "c4a45bf1824c2ca5af9a620f243b27b654e184e61b56e1305c3b73e807703fcd": {
                "Name": "nginx-test_nginx-hello.2.u3f9sshp3112wrgppb4n917wv",
                "EndpointID": "88a9d960c5133cb9b5f740af3660ae72a87adf04220861bfe99506e46be933d4",
                "MacAddress": "02:42:0a:00:03:24",
                "IPv4Address": "10.0.3.36/24",
                "IPv6Address": ""
            },
            "ff3c204bf36daaa02dc72bdd6b766ec444ad2d20081d054e0a193b4e937244a9": {
                "Name": "netmonitor_nginx.1.5zrf5447mmy0dx39m5u3ft1ty",
                "EndpointID": "1d68d46879772cb6cbc2ecbc7ee92fa69beaf0ea8537cf7c295ab7370b66bb1d",
                "MacAddress": "02:42:0a:00:03:03",
                "IPv4Address": "10.0.3.3/24",
                "IPv6Address": ""
            },
            "lb-proxynet": {
                "Name": "proxynet-endpoint",
                "EndpointID": "ffbc98bca61cee986160273fc201c1c5e33eb0cf5aff99836aea6466c61c4be0",
                "MacAddress": "02:42:0a:00:03:04",
                "IPv4Address": "10.0.3.4/24",
                "IPv6Address": ""
            }
        },
        "Options": {
            "com.docker.network.driver.overlay.vxlanid_list": "4104"
        },
        "Labels": {},
        "Peers": [
            {
                "Name": "f52e26b65dfe",
                "IP": "109.248.213.210"
            }
        ]
    }
]

All containers are pings via proxynet network.

$ docker ps:

CONTAINER ID   IMAGE                                                COMMAND                  CREATED          STATUS          PORTS                 NAMES
c4a45bf1824c   nginxdemos/hello:latest                              "/docker-entrypoint.…"   2 minutes ago    Up 2 minutes    80/tcp                nginx-test_nginx-hello.2.u3f9sshp3112wrgppb4n917wv
a6613991edf5   nginxdemos/hello:latest                              "/docker-entrypoint.…"   2 minutes ago    Up 2 minutes    80/tcp                nginx-test_nginx-hello.3.l3wn902p7lms6pz05oq99jabk
1ac41377307e   nginxdemos/hello:latest                              "/docker-entrypoint.…"   2 minutes ago    Up 2 minutes    80/tcp                nginx-test_nginx-hello.1.i7z8mtc9pk5n6d8k8sfwuhqhc

$ docker network inspect proxynet:

[
    {
        "Name": "proxynet",
        "Id": "i578jljxi1gcqzgixbyxtf2su",
        "Created": "2024-10-09T02:19:54.971944434Z",
        "Scope": "swarm",
        "Driver": "overlay",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": null,
            "Config": [
                {
                    "Subnet": "10.0.3.0/24",
                    "Gateway": "10.0.3.1"
                }
            ]
        },
        "Internal": false,
        "Attachable": true,
        "Ingress": false,
        "ConfigFrom": {
            "Network": ""
        },
        "ConfigOnly": false,
        "Containers": {
            "1ac41377307eb4c540f20f262d101e6aa700d6e47f69ec67900cf7699006fc84": {
                "Name": "nginx-test_nginx-hello.1.i7z8mtc9pk5n6d8k8sfwuhqhc",
                "EndpointID": "670a2fec3bef9972641b57a5a7a4b7a0a1672dfb26e9635c383794119a54aaed",
                "MacAddress": "02:42:0a:00:03:23",
                "IPv4Address": "10.0.3.35/24",
                "IPv6Address": ""
            },
            "2ad09cdb74e17c536f97cb8afdb096fdfe27f03a00d393b81c45ba9d4d1aec9e": {
                "Name": "netmonitor_mysql.1.yrnk9udwrocdaykzxxmz1uprz",
                "EndpointID": "e5f569dba3ed6043a745cebbf11dcee1d17bd4c250fd2a936ccd72eba31c2bd1",
                "MacAddress": "02:42:0a:00:03:02",
                "IPv4Address": "10.0.3.2/24",
                "IPv6Address": ""
            },
            "34fa81e21d3cdd2f5a9ae13af65c7db09d8fd252fd626aa6d818a1a0a4ec583c": {
                "Name": "traefik_reverse-proxy.1.knehflcsz5i0tprl5gxwrhivq",
                "EndpointID": "181634edf945f9a3f91bc6cba266e2e6dff1e8f1baf73fadc59c036973d5380a",
                "MacAddress": "02:42:0a:00:03:19",
                "IPv4Address": "10.0.3.25/24",
                "IPv6Address": ""
            },
            "a6613991edf53e8420659749622b14d33839962963a1976bb324ca4b42137f01": {
                "Name": "nginx-test_nginx-hello.3.l3wn902p7lms6pz05oq99jabk",
                "EndpointID": "15ee61bb1b234269464bd2bde696e564881319e616a7dc503216457318f84d1c",
                "MacAddress": "02:42:0a:00:03:25",
                "IPv4Address": "10.0.3.37/24",
                "IPv6Address": ""
            },
            "c4a45bf1824c2ca5af9a620f243b27b654e184e61b56e1305c3b73e807703fcd": {
                "Name": "nginx-test_nginx-hello.2.u3f9sshp3112wrgppb4n917wv",
                "EndpointID": "88a9d960c5133cb9b5f740af3660ae72a87adf04220861bfe99506e46be933d4",
                "MacAddress": "02:42:0a:00:03:24",
                "IPv4Address": "10.0.3.36/24",
                "IPv6Address": ""
            },
            "ff3c204bf36daaa02dc72bdd6b766ec444ad2d20081d054e0a193b4e937244a9": {
                "Name": "netmonitor_nginx.1.5zrf5447mmy0dx39m5u3ft1ty",
                "EndpointID": "1d68d46879772cb6cbc2ecbc7ee92fa69beaf0ea8537cf7c295ab7370b66bb1d",
                "MacAddress": "02:42:0a:00:03:03",
                "IPv4Address": "10.0.3.3/24",
                "IPv6Address": ""
            },
            "lb-proxynet": {
                "Name": "proxynet-endpoint",
                "EndpointID": "ffbc98bca61cee986160273fc201c1c5e33eb0cf5aff99836aea6466c61c4be0",
                "MacAddress": "02:42:0a:00:03:04",
                "IPv4Address": "10.0.3.4/24",
                "IPv6Address": ""
            }
        },
        "Options": {
            "com.docker.network.driver.overlay.vxlanid_list": "4104"
        },
        "Labels": {},
        "Peers": [
            {
                "Name": "f52e26b65dfe",
                "IP": "109.248.213.210"
            }
        ]
    }
]

Find the typo :wink:

Hint: look for :

Oh! Thanks! I wasted 12 hours of my life over this little thing. AAAAAAAAAAA!