Traefik 2.2 无法通过 TCP 连接到 Docker Swarm API

Traefik 2.2 cannot connect to Docker Swarm API over TCP

运行 Docker 18.09.7ce with Docker API v1.39 on Ubuntu 18.04 LTS.

我正在尝试将 Traefik 2.2 设置为某些 swarm 服务的反向代理,但由于某些原因,Traefik 无法通过 Traefik 文档中给出的 TCP 端口连接到 Docker 守护进程。这三个错误消息不断重复。

level=debug msg="FIXME: Got an status-code for which error does not match any expected type!!!: -1" status_code=-1 module=api
level=error msg="Failed to retrieve information of the docker client and server host: Cannot connect to the Docker daemon at tcp://127.0.0.1:2377. Is the docker daemon running?" providerName=docker
level=error msg="Provider connection error Cannot connect to the Docker daemon at tcp://127.0.0.1:2377. Is the docker daemon running?, retrying in 1.461723532s" providerName=docker

它在一个管理器节点上 运行(我只有一个节点)并且 swarm 工作正常,API 通过该 TCP 端口公开,如下面的输出所示命令。

$ sudo ss --tcp --listening --processes --numeric | grep ":2377"
LISTEN   0         128                       *:2377                   *:*        users:(("dockerd",pid=30747,fd=23))  

我的架构基于 this blog post,使用 docker network create --driver=overlay proxy 创建了一个名为 proxy 的共享覆盖网络。

我试过this但是没有用,我也找不到任何其他相关问题。这是我的配置文件:

traefik.toml

[providers.docker]
  endpoint = "tcp://127.0.0.1:2377"
  swarmMode = true
  network = "proxy"

[entryPoints]
  [entryPoints.web]
    address = ":80"
  [entryPoints.web-secure]
    address = ":443"

[certificatesResolvers.le.acme]
  email = "my-email@email.com"
  storage = "/letsencrypt/acme.json"
  caserver = "https://acme-staging-v02.api.letsencrypt.org/directory" # For testing
  [certificatesResolvers.le.acme.httpChallenge]
    entryPoint = "web"

[log]
  level = "DEBUG"

traefik.yml

version: "3.7"

services:
  reverse-proxy:
    deploy:
      placement:
        constraints:
          - node.role == manager
    image: "traefik:v2.2"
    ports:
      - 80:80
      - 443:443
    volumes:
      - "/var/run/docker.sock:/var/run/docker.sock"
      - "/path/to/traefik.toml:/etc/traefik/traefik.toml"
      - "letsencrypt:/letsencrypt"
    networks:
      - "proxy"

networks:
  proxy:
    external: true

volumes:
  letsencrypt:

我能看到的唯一区别是该博客没有明确定义 dockers 提供程序的端点。也许要删除它?