Is there a way to persist Traefik rules through firewalld reload?

Environment

RHEL 8

$ cat /etc/redhat-release 
Red Hat Enterprise Linux release 8.4 (Ootpa)

Docker 20.10.9 (Swarm mode)

$ docker version
Client: Docker Engine - Community
 Version:           20.10.9
 API version:       1.41
 Go version:        go1.16.8
 Git commit:        c2ea9bc
 Built:             Mon Oct  4 16:08:25 2021
 OS/Arch:           linux/amd64
 Context:           default
 Experimental:      true

Server: Docker Engine - Community
 Engine:
  Version:          20.10.9
  API version:      1.41 (minimum version 1.12)
  Go version:       go1.16.8
  Git commit:       79ea9d3
  Built:            Mon Oct  4 16:06:48 2021
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.4.11
  GitCommit:        5b46e404f6b9f661a205e28d59c982d3634148f8
 runc:
  Version:          1.0.2
  GitCommit:        v1.0.2-0-g52b36a2
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0

Traefik 2.5

$ docker exec -it $(docker ps -f name=example_reverse-proxy -q) traefik version
Version:      2.5.3
Codename:     livarot
Go version:   go1.17.1
Built:        2021-09-20T15:43:56Z
OS/Arch:      linux/amd64

Set up the deployment

Make a Traefik Quick Start deployment for Swarm mode.

# docker-compose.yml
version: '3'

services:
  reverse-proxy:
    # The official v2 Traefik docker image
    image: traefik:v2.5
    # Enables the web UI and tells Traefik to listen to docker
    command:
      - --api.insecure=true
      - --providers.docker
      - --providers.docker.swarmMode=true
      - --providers.docker.exposedbydefault=false
      - --entrypoints.http.address=:80
      - --accesslog
      - --log.level=DEBUG
    ports:
      # The HTTP port
      - "80:80"
      # The Web UI (enabled by --api.insecure=true)
      - "8080:8080"
    volumes:
      # So that Traefik can listen to the Docker events
      - /var/run/docker.sock:/var/run/docker.sock
    deploy:
      placement:
        constraints:
          - node.role == manager
      labels:
        traefik.enable: "true"
        traefik.docker.network: "example_default"
  whoami:
    # A container that exposes an API to show its IP address
    image: traefik/whoami
    deploy:
      labels:
        traefik.enable: "true"
        traefik.http.routers.whoami.rule: "Host(`whoami.docker.localhost`)"
        traefik.http.routers.whoami.entrypoints: http
        traefik.http.services.whoami.loadbalancer.server.port: "80"
        traefik.docker.network: "example_default"

Deploy it.

$ docker stack deploy -c docker-compose.yml example
Creating network example_default
Creating service example_reverse-proxy
Creating service example_whoami

Verify deployment status.

$ docker ps -af "label=com.docker.stack.namespace=example"
CONTAINER ID   IMAGE                   COMMAND                  CREATED          STATUS          PORTS     NAMES
803fd46c403e   traefik/whoami:latest   "/whoami"                22 seconds ago   Up 20 seconds   80/tcp    example_whoami.1.bmeduo3gsjshcidh4gtsh1ugb
0b7cdd777212   traefik:v2.5            "/entrypoint.sh --ap…"   24 seconds ago   Up 22 seconds   80/tcp    example_reverse-proxy.1.klt5b7p4cea2fx9kipnzadt9w

Verify DOCKER-INGRESS firewall chain is configured.

$ sudo iptables -n -L DOCKER-INGRESS
Chain DOCKER-INGRESS (1 references)
target     prot opt source               destination         
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:8080
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            state RELATED,ESTABLISHED tcp spt:8080
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:80
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            state RELATED,ESTABLISHED tcp spt:80
RETURN     all  --  0.0.0.0/0            0.0.0.0/0           

Verify connectivity.

$ curl -v -H Host:whoami.docker.localhost http://127.0.0.1
* Rebuilt URL to: http://127.0.0.1/
* Uses proxy env variable no_proxy == '127.0.0.1,localhost,10.0.0.0/8,172.16.0.0/12,192.168.0.0/16'
*   Trying 127.0.0.1...
* TCP_NODELAY set
* Connected to 127.0.0.1 (127.0.0.1) port 80 (#0)                                         
> GET / HTTP/1.1
> Host:whoami.docker.localhost
> User-Agent: curl/7.61.1
> Accept: */*
>
< HTTP/1.1 200 OK
< Content-Length: 376
< Content-Type: text/plain; charset=utf-8
< Date: Wed, 03 Nov 2021 17:37:44 GMT<
Hostname: 6f83977ba1b7
IP: 127.0.0.1
IP: 10.0.18.6
IP: 172.18.0.3
RemoteAddr: 10.0.18.3:36668
GET / HTTP/1.1
Host: whoami.docker.localhost
User-Agent: curl/7.61.1
Accept: */*
Accept-Encoding: gzip
X-Forwarded-For: 10.0.0.2
X-Forwarded-Host: whoami.docker.localhost
X-Forwarded-Port: 80
X-Forwarded-Proto: http
X-Forwarded-Server: ec90f31b38fb
X-Real-Ip: 10.0.0.2

* Connection #0 to host 127.0.0.1 left intact                                             

Break it

Reload firewalld.

$ sudo firewall-cmd --reload
success

Verify the DOCKER-INGRESS chain was removed.

$ sudo iptables -n -L DOCKER-INGRESS
iptables: No chain/target/match by that name.

Verify lack of connectivity.

$ curl -v -H Host:whoami.docker.localhost http://127.0.0.1
* Rebuilt URL to: http://127.0.0.1/
* Uses proxy env variable no_proxy == '127.0.0.1,localhost,10.0.0.0/8,172.16.0.0/12,192.168.0.0/16'
*   Trying 127.0.0.1...
* TCP_NODELAY set
* Connected to 127.0.0.1 (127.0.0.1) port 80 (#0)                                         
> GET / HTTP/1.1
> Host:whoami.docker.localhost
> User-Agent: curl/7.61.1
> Accept: */*
>

Additional notes

Docker's firewalld zone persists on reload. Can Traefik use that?

$ sudo firewall-cmd --zone=docker --list-all                                                                                                            
docker (active)
  target: ACCEPT
  icmp-block-inversion: no
  interfaces: docker0 docker_gwbridge
  sources:
  services:
  ports:
  protocols:
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:

Debug log

example_reverse-proxy.1.rna6y8g2xsbh@localhost    | time="2021-11-03T18:10:47Z" level=info msg="Configuration loaded from flags."
example_reverse-proxy.1.rna6y8g2xsbh@localhost    | time="2021-11-03T18:10:47Z" level=info msg="Traefik version 2.5.3 built on 2021-09-20T15:43:56Z"
example_reverse-proxy.1.rna6y8g2xsbh@localhost    | time="2021-11-03T18:10:47Z" level=debug msg="Static configuration loaded {\"global\":{\"checkNewVersion\":true},\"serversTransport\":{\"maxIdleConnsPerHost\":200},\"entryPoints\":{\"http\":{\"address\":\":80\",\"transport\":{\"lifeCycle\":{\"graceTimeOut\":\"10s\"},\"respondingTimeouts\":{\"idleTimeout\":\"3m0s\"}},\"forwardedHeaders\":{},\"http\":{},\"udp\":{\"timeout\":\"3s\"}},\"traefik\":{\"address\":\":8080\",\"transport\":{\"lifeCycle\":{\"graceTimeOut\":\"10s\"},\"respondingTimeouts\":{\"idleTimeout\":\"3m0s\"}},\"forwardedHeaders\":{},\"http\":{},\"udp\":{\"timeout\":\"3s\"}}},\"providers\":{\"providersThrottleDuration\":\"2s\",\"docker\":{\"watch\":true,\"endpoint\":\"unix:///var/run/docker.sock\",\"defaultRule\":\"Host(`{{ normalize .Name }}`)\",\"swarmMode\":true,\"swarmModeRefreshSeconds\":\"15s\"}},\"api\":{\"insecure\":true,\"dashboard\":true},\"log\":{\"level\":\"DEBUG\",\"format\":\"common\"},\"accessLog\":{\"format\":\"common\",\"filters\":{},\"fields\":{\"defaultMode\":\"keep\",\"headers\":{\"defaultMode\":\"drop\"}}},\"pilot\":{\"dashboard\":true}}"
example_reverse-proxy.1.rna6y8g2xsbh@localhost    | time="2021-11-03T18:10:47Z" level=info msg="\nStats collection is disabled.\nHelp us improve Traefik by turning this feature on :)\nMore details on: https://doc.traefik.io/traefik/contributing/data-collection/\n"
example_reverse-proxy.1.rna6y8g2xsbh@localhost    | time="2021-11-03T18:10:47Z" level=info msg="Starting provider aggregator.ProviderAggregator {}"
example_reverse-proxy.1.rna6y8g2xsbh@localhost    | time="2021-11-03T18:10:47Z" level=debug msg="Start TCP Server" entryPointName=traefik
example_reverse-proxy.1.rna6y8g2xsbh@localhost    | time="2021-11-03T18:10:47Z" level=debug msg="Start TCP Server" entryPointName=http
example_reverse-proxy.1.rna6y8g2xsbh@localhost    | time="2021-11-03T18:10:47Z" level=info msg="Starting provider *acme.ChallengeTLSALPN {\"Timeout\":4000000000}"
example_reverse-proxy.1.rna6y8g2xsbh@localhost    | time="2021-11-03T18:10:47Z" level=info msg="Starting provider *docker.Provider {\"watch\":true,\"endpoint\":\"unix:///var/run/docker.sock\",\"defaultRule\":\"Host(`{{ normalize .Name }}`)\",\"swarmMode\":true,\"swarmModeRefreshSeconds\":\"15s\"}"
example_reverse-proxy.1.rna6y8g2xsbh@localhost    | time="2021-11-03T18:10:47Z" level=info msg="Starting provider *traefik.Provider {}"
example_reverse-proxy.1.rna6y8g2xsbh@localhost    | time="2021-11-03T18:10:47Z" level=debug msg="Configuration received from provider internal: {\"http\":{\"routers\":{\"api\":{\"entryPoints\":[\"traefik\"],\"service\":\"api@internal\",\"rule\":\"PathPrefix(`/api`)\",\"priority\":2147483646},\"dashboard\":{\"entryPoints\":[\"traefik\"],\"middlewares\":[\"dashboard_redirect@internal\",\"dashboard_stripprefix@internal\"],\"service\":\"dashboard@internal\",\"rule\":\"PathPrefix(`/`)\",\"priority\":2147483645}},\"services\":{\"api\":{},\"dashboard\":{},\"noop\":{}},\"middlewares\":{\"dashboard_redirect\":{\"redirectRegex\":{\"regex\":\"^(http:\\\\/\\\\/(\\\\[[\\\\w:.]+\\\\]|[\\\\w\\\\._-]+)(:\\\\d+)?)\\\\/$\",\"replacement\":\"${1}/dashboard/\",\"permanent\":true}},\"dashboard_stripprefix\":{\"stripPrefix\":{\"prefixes\":[\"/dashboard/\",\"/dashboard\"]}}},\"serversTransports\":{\"default\":{\"maxIdleConnsPerHost\":200}}},\"tcp\":{},\"tls\":{}}" providerName=internal
example_reverse-proxy.1.rna6y8g2xsbh@localhost    | time="2021-11-03T18:10:47Z" level=debug msg="No default certificate, generating one" tlsStoreName=default
example_reverse-proxy.1.rna6y8g2xsbh@localhost    | time="2021-11-03T18:10:47Z" level=debug msg="Provider connection established with docker 20.10.9 (API 1.41)" providerName=docker
example_reverse-proxy.1.rna6y8g2xsbh@localhost    | time="2021-11-03T18:10:47Z" level=debug msg="Configuration received from provider docker: {\"http\":{\"routers\":{\"whoami\":{\"entryPoints\":[\"http\"],\"service\":\"whoami\",\"rule\":\"Host(`whoami.docker.localhost`)\"}},\"services\":{\"whoami\":{\"loadBalancer\":{\"servers\":[{\"url\":\"http://10.0.19.6:80\"}],\"passHostHeader\":true}}}},\"tcp\":{},\"udp\":{}}" providerName=docker
example_reverse-proxy.1.rna6y8g2xsbh@localhost    | time="2021-11-03T18:10:47Z" level=debug msg="Added outgoing tracing middleware api@internal" middlewareType=TracingForwarder entryPointName=traefik routerName=api@internal middlewareName=tracing
example_reverse-proxy.1.rna6y8g2xsbh@localhost    | time="2021-11-03T18:10:47Z" level=debug msg="Added outgoing tracing middleware dashboard@internal" entryPointName=traefik routerName=dashboard@internal middlewareName=tracing middlewareType=TracingForwarder
example_reverse-proxy.1.rna6y8g2xsbh@localhost    | time="2021-11-03T18:10:47Z" level=debug msg="Creating middleware" entryPointName=traefik routerName=dashboard@internal middlewareName=dashboard_stripprefix@internal middlewareType=StripPrefix
example_reverse-proxy.1.rna6y8g2xsbh@localhost    | time="2021-11-03T18:10:47Z" level=debug msg="Adding tracing to middleware" entryPointName=traefik routerName=dashboard@internal middlewareName=dashboard_stripprefix@internal
example_reverse-proxy.1.rna6y8g2xsbh@localhost    | time="2021-11-03T18:10:47Z" level=debug msg="Creating middleware" middlewareName=dashboard_redirect@internal middlewareType=RedirectRegex entryPointName=traefik routerName=dashboard@internal
example_reverse-proxy.1.rna6y8g2xsbh@localhost    | time="2021-11-03T18:10:47Z" level=debug msg="Setting up redirection from ^(http:\\/\\/(\\[[\\w:.]+\\]|[\\w\\._-]+)(:\\d+)?)\\/$ to ${1}/dashboard/" middlewareName=dashboard_redirect@internal middlewareType=RedirectRegex entryPointName=traefik routerName=dashboard@internal
example_reverse-proxy.1.rna6y8g2xsbh@localhost    | time="2021-11-03T18:10:47Z" level=debug msg="Adding tracing to middleware" routerName=dashboard@internal middlewareName=dashboard_redirect@internal entryPointName=traefik
example_reverse-proxy.1.rna6y8g2xsbh@localhost    | time="2021-11-03T18:10:47Z" level=debug msg="Creating middleware" middlewareName=traefik-internal-recovery middlewareType=Recovery entryPointName=traefik
example_reverse-proxy.1.rna6y8g2xsbh@localhost    | time="2021-11-03T18:10:47Z" level=debug msg="No default certificate, generating one" tlsStoreName=default
example_reverse-proxy.1.rna6y8g2xsbh@localhost    | time="2021-11-03T18:10:48Z" level=debug msg="Creating middleware" middlewareType=Pipelining entryPointName=http routerName=whoami@docker serviceName=whoami middlewareName=pipelining
example_reverse-proxy.1.rna6y8g2xsbh@localhost    | time="2021-11-03T18:10:48Z" level=debug msg="Creating load-balancer" entryPointName=http routerName=whoami@docker serviceName=whoami
example_reverse-proxy.1.rna6y8g2xsbh@localhost    | time="2021-11-03T18:10:48Z" level=debug msg="Creating server 0 http://10.0.19.6:80" entryPointName=http routerName=whoami@docker serviceName=whoami serverName=0
example_reverse-proxy.1.rna6y8g2xsbh@localhost    | time="2021-11-03T18:10:48Z" level=debug msg="child http://10.0.19.6:80 now UP"
example_reverse-proxy.1.rna6y8g2xsbh@localhost    | time="2021-11-03T18:10:48Z" level=debug msg="Propagating new UP status"
example_reverse-proxy.1.rna6y8g2xsbh@localhost    | time="2021-11-03T18:10:48Z" level=debug msg="Added outgoing tracing middleware whoami" middlewareType=TracingForwarder entryPointName=http routerName=whoami@docker middlewareName=tracing
example_reverse-proxy.1.rna6y8g2xsbh@localhost    | time="2021-11-03T18:10:48Z" level=debug msg="Creating middleware" middlewareName=traefik-internal-recovery middlewareType=Recovery entryPointName=http
example_reverse-proxy.1.rna6y8g2xsbh@localhost    | time="2021-11-03T18:10:48Z" level=debug msg="Added outgoing tracing middleware api@internal" entryPointName=traefik middlewareName=tracing middlewareType=TracingForwarder routerName=api@internal
example_reverse-proxy.1.rna6y8g2xsbh@localhost    | time="2021-11-03T18:10:48Z" level=debug msg="Added outgoing tracing middleware dashboard@internal" entryPointName=traefik routerName=dashboard@internal middlewareName=tracing middlewareType=TracingForwarder
example_reverse-proxy.1.rna6y8g2xsbh@localhost    | time="2021-11-03T18:10:48Z" level=debug msg="Creating middleware" entryPointName=traefik routerName=dashboard@internal middlewareName=dashboard_stripprefix@internal middlewareType=StripPrefix
example_reverse-proxy.1.rna6y8g2xsbh@localhost    | time="2021-11-03T18:10:48Z" level=debug msg="Adding tracing to middleware" entryPointName=traefik routerName=dashboard@internal middlewareName=dashboard_stripprefix@internal
example_reverse-proxy.1.rna6y8g2xsbh@localhost    | time="2021-11-03T18:10:48Z" level=debug msg="Creating middleware" routerName=dashboard@internal middlewareType=RedirectRegex middlewareName=dashboard_redirect@internal entryPointName=traefik
example_reverse-proxy.1.rna6y8g2xsbh@localhost    | time="2021-11-03T18:10:48Z" level=debug msg="Setting up redirection from ^(http:\\/\\/(\\[[\\w:.]+\\]|[\\w\\._-]+)(:\\d+)?)\\/$ to ${1}/dashboard/" entryPointName=traefik routerName=dashboard@internal middlewareType=RedirectRegex middlewareName=dashboard_redirect@internal
example_reverse-proxy.1.rna6y8g2xsbh@localhost    | time="2021-11-03T18:10:48Z" level=debug msg="Adding tracing to middleware" routerName=dashboard@internal middlewareName=dashboard_redirect@internal entryPointName=traefik
example_reverse-proxy.1.rna6y8g2xsbh@localhost    | time="2021-11-03T18:10:48Z" level=debug msg="Creating middleware" middlewareName=traefik-internal-recovery middlewareType=Recovery entryPointName=traefik
example_reverse-proxy.1.rna6y8g2xsbh@localhost    | time="2021-11-03T18:11:02Z" level=debug msg="Configuration received from provider docker: {\"http\":{\"routers\":{\"dashboard\":{\"service\":\"api@internal\",\"rule\":\"Host(`traefik.docker.localhost`) \\u0026\\u0026 (PathPrefix(`/api`) || PathPrefix(`/dashboard`))\"},\"whoami\":{\"entryPoints\":[\"http\"],\"service\":\"whoami\",\"rule\":\"Host(`whoami.docker.localhost`)\"}},\"services\":{\"dashboard\":{\"loadBalancer\":{\"servers\":[{\"url\":\"http://10.0.19.3:9999\"}],\"passHostHeader\":true}},\"whoami\":{\"loadBalancer\":{\"servers\":[{\"url\":\"http://10.0.19.6:80\"}],\"passHostHeader\":true}}}},\"tcp\":{},\"udp\":{}}" providerName=docker
example_reverse-proxy.1.rna6y8g2xsbh@localhost    | time="2021-11-03T18:11:02Z" level=debug msg="No entryPoint defined for this router, using the default one(s) instead: [http]" routerName=dashboard
example_reverse-proxy.1.rna6y8g2xsbh@localhost    | time="2021-11-03T18:11:02Z" level=debug msg="No default certificate, generating one" tlsStoreName=default
example_reverse-proxy.1.rna6y8g2xsbh@localhost    | time="2021-11-03T18:11:03Z" level=debug msg="Added outgoing tracing middleware api@internal" routerName=api@internal middlewareName=tracing middlewareType=TracingForwarder entryPointName=traefik
example_reverse-proxy.1.rna6y8g2xsbh@localhost    | time="2021-11-03T18:11:03Z" level=debug msg="Added outgoing tracing middleware dashboard@internal" entryPointName=traefik routerName=dashboard@internal middlewareName=tracing middlewareType=TracingForwarder
example_reverse-proxy.1.rna6y8g2xsbh@localhost    | time="2021-11-03T18:11:03Z" level=debug msg="Creating middleware" entryPointName=traefik routerName=dashboard@internal middlewareName=dashboard_stripprefix@internal middlewareType=StripPrefix
example_reverse-proxy.1.rna6y8g2xsbh@localhost    | time="2021-11-03T18:11:03Z" level=debug msg="Adding tracing to middleware" middlewareName=dashboard_stripprefix@internal entryPointName=traefik routerName=dashboard@internal
example_reverse-proxy.1.rna6y8g2xsbh@localhost    | time="2021-11-03T18:11:03Z" level=debug msg="Creating middleware" entryPointName=traefik routerName=dashboard@internal middlewareName=dashboard_redirect@internal middlewareType=RedirectRegex
example_reverse-proxy.1.rna6y8g2xsbh@localhost    | time="2021-11-03T18:11:03Z" level=debug msg="Setting up redirection from ^(http:\\/\\/(\\[[\\w:.]+\\]|[\\w\\._-]+)(:\\d+)?)\\/$ to ${1}/dashboard/" entryPointName=traefik routerName=dashboard@internal middlewareName=dashboard_redirect@internal middlewareType=RedirectRegex
example_reverse-proxy.1.rna6y8g2xsbh@localhost    | time="2021-11-03T18:11:03Z" level=debug msg="Adding tracing to middleware" entryPointName=traefik routerName=dashboard@internal middlewareName=dashboard_redirect@internal
example_reverse-proxy.1.rna6y8g2xsbh@localhost    | time="2021-11-03T18:11:03Z" level=debug msg="Creating middleware" entryPointName=traefik middlewareName=traefik-internal-recovery middlewareType=Recovery
example_reverse-proxy.1.rna6y8g2xsbh@localhost    | time="2021-11-03T18:11:03Z" level=debug msg="Creating middleware" entryPointName=http serviceName=whoami routerName=whoami@docker middlewareName=pipelining middlewareType=Pipelining
example_reverse-proxy.1.rna6y8g2xsbh@localhost    | time="2021-11-03T18:11:03Z" level=debug msg="Creating load-balancer" routerName=whoami@docker entryPointName=http serviceName=whoami
example_reverse-proxy.1.rna6y8g2xsbh@localhost    | time="2021-11-03T18:11:03Z" level=debug msg="Creating server 0 http://10.0.19.6:80" routerName=whoami@docker entryPointName=http serviceName=whoami serverName=0
example_reverse-proxy.1.rna6y8g2xsbh@localhost    | time="2021-11-03T18:11:03Z" level=debug msg="child http://10.0.19.6:80 now UP"
example_reverse-proxy.1.rna6y8g2xsbh@localhost    | time="2021-11-03T18:11:03Z" level=debug msg="Propagating new UP status"
example_reverse-proxy.1.rna6y8g2xsbh@localhost    | time="2021-11-03T18:11:03Z" level=debug msg="Added outgoing tracing middleware whoami" routerName=whoami@docker middlewareName=tracing middlewareType=TracingForwarder entryPointName=http
example_reverse-proxy.1.rna6y8g2xsbh@localhost    | time="2021-11-03T18:11:03Z" level=debug msg="Added outgoing tracing middleware api@internal" entryPointName=http routerName=dashboard@docker middlewareName=tracing middlewareType=TracingForwarder
example_reverse-proxy.1.rna6y8g2xsbh@localhost    | time="2021-11-03T18:11:03Z" level=debug msg="Creating middleware" middlewareName=traefik-internal-recovery middlewareType=Recovery entryPointName=http
example_reverse-proxy.1.rna6y8g2xsbh@localhost    | time="2021-11-03T18:11:17Z" level=debug msg="Configuration received from provider docker: {\"http\":{\"routers\":{\"dashboard\":{\"service\":\"api@internal\",\"rule\":\"Host(`traefik.docker.localhost`) \\u0026\\u0026 (PathPrefix(`/api`) || PathPrefix(`/dashboard`))\"},\"whoami\":{\"entryPoints\":[\"http\"],\"service\":\"whoami\",\"rule\":\"Host(`whoami.docker.localhost`)\"}},\"services\":{\"dashboard\":{\"loadBalancer\":{\"servers\":[{\"url\":\"http://10.0.19.3:9999\"}],\"passHostHeader\":true}},\"whoami\":{\"loadBalancer\":{\"servers\":[{\"url\":\"http://10.0.19.6:80\"}],\"passHostHeader\":true}}}},\"tcp\":{},\"udp\":{}}" providerName=docker
example_reverse-proxy.1.rna6y8g2xsbh@localhost    | time="2021-11-03T18:11:17Z" level=info msg="Skipping same configuration" providerName=docker

Hello @3ch01c,

Thanks for your interest in Traefik!

What are you expecting from Traefik?