docker - Traefik 2.2 无法通过 TCP 连接到 Docker Swarm API
问题描述
在 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))
我的架构基于这篇博文,并带有一个名为proxy
created with的共享覆盖网络docker network create --driver=overlay proxy
。
我试过了,但没有用,我真的找不到任何其他相关的问题。这是我的配置文件:
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 提供者的端点。也许要删除它?
推荐阅读
- git - Git 因致命错误而失败。错误:打开(“testdb/testdb.jfm”):权限被拒绝致命:无法处理路径 testdb/testdb.jfm
- java - 在 MainActivity 中检查 View 的尺寸
- php - 如何检查过期日期是否与php中的当前日期一起传递?
- javascript - Unexpected behaviour in timing function
- xml - 是否可以用另一个 XSLT 代码(元 XSLT)转换 XSLT 代码?
- tfs - 无法在 TFS 中获取访问级别选项卡
- python - 将指数符号数字转换为字符串 - 解释
- swift - Alamofire 获取请求参数 - 在哪里显示 Cookie
- matlab - 在 MATLAB 中从方程中消除变量
- c++ - 如何正确推断函数的无异常性?