【问题标题】:Traefik 2.2 cannot connect to Docker Swarm API over TCPTraefik 2.2 无法通过 TCP 连接到 Docker Swarm API
【发布时间】:2020-05-20 11:25:28
【问题描述】:

在 Ubuntu 18.04 LTS 上使用 Docker API v1.39 运行 Docker 18.09.7ce。

我正在尝试将 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:

【问题讨论】:

  • 我能看到的唯一区别是博客没有明确定义 docker 提供者的端点。也许要删除它?
  • @PatrickMagee 成功了!如果您想将其写为答案,我会将其标记为已接受的答案。谢谢!

标签: docker tcp reverse-proxy docker-swarm traefik


【解决方案1】:

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

【讨论】:

  • 原因是端点默认使用 Docker 套接字。如果你想通过 TCP 访问它,你需要做额外的配置。 Traefik 文档说使用endpoint = "tcp://127.0.0.1:2377" 并提供有关公开 Docker 套接字时涉及的安全风险的讨论链接,但他们实际上并没有说文档中的 sn-ps 不会立即生效盒子。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-05
  • 2022-08-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多