带有 Traefik 的 Docker Swarm Windows Worker 返回网关超时

标签 docker tcp docker-swarm traefik bad-gateway

目标是让混合操作系统 Docker swarm 使用 Linux 服务器和运行 Docker For Windows 的 Windows 10 机器运行

目前,如果 --endpoint-mode 标志设置为“dnsrr”,则理论上在混合操作系统群上支持 Windows worker 。这是解释here .然而尝试使用 traefik 路由到一个简单的 docker whoami 图像 stefanscherer/whoami图像失败。

最小的失败示例

// On (Linux) Manager Node:
docker swarm init --advertise-addr <hostaddress> --listen-addr <hostaddress>:2377

// On (Windows 10) Worker Node:
docker swarm join <jointoken>

// On Manager Node:
docker network create --driver=overlay traefik-net

docker service create \
    --name traefik \
    --constraint=node.role==manager \
    --publish 80:80 --publish 8080:8080 \
    --mount type=bind,source=/var/run/docker.sock,target=/var/run/docker.sock \
    --network traefik-net \
    traefik \
    --docker \
    --docker.swarmmode \
    --docker.domain=traefik \
    --docker.watch \
    --web

docker service create \
    --name whoami \
    --label traefik.enable=true \
    --label traefik.frontend.rule=Host:whoami.docker \
    --label traefik.protocol=http \
    --label traefik.docker.network=traefik-net \
    --label traefik.backend.loadbalancer.method=drr \
    --label traefik.backend=whoami \
    --network traefik-net \
    --mode global\
    --label traefik.port=80 \
    stefanscherer/whoami

Traefik 成功设置后端规则,检查路由我使用 traefik 仪表板找出规则路由到的 URL,例如'10.0.0.12:8080'。然后我将其与每个任务的 IP 地址进行比较,可以使用 docker service ps 查看任务,并使用

找到它们的地址
docker inspect <taskID> \
    --format '{{ range .NetworksAttachments }}{{ .Addresses }}{{ end }}'

问题

带有 header “Host:whoami.docker”的 HTTP 请求发送到管理器的 IP 时,在路由到管理器时会成功,而在路由到 Windows 工作器上的 Windows 任务时会失败并显示 504 Gateway Timeout。

最佳答案

您没有将 --endpoint-mode=dnsrr 设置为您的 whoami 服务。

docker service create \
--name whoami \
--label traefik.enable=true \
--label traefik.frontend.rule=Host:whoami.docker \
--label traefik.protocol=http \
--label traefik.docker.network=traefik-net \
--label traefik.backend.loadbalancer.method=drr \
--label traefik.backend=whoami \
--network traefik-net \
--mode global\
--label traefik.port=80 \
--endpoint-mode=dnsrr
stefanscherer/whoami

设置端点模式 dnsrr 将禁用可能导致问题的 VIP 地址。

关于带有 Traefik 的 Docker Swarm Windows Worker 返回网关超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45822412/

相关文章:

c++ - 使用什么库来创建简单的端口扫描器?

java - pio 火车失败并出现 IOException : Connection reset by peer

http - 在 TCP 负载之间分割 CRLF

kubernetes - 如何使用容器为具有(长期)粘性 session 的应用程序进行零停机滚动更新

docker - 如何在docker-compose文件中获取随机服务端口并将其设置为env var?

docker - docker-compose:从docker容器访问localhost

c++ - 如何获得涉及 C++ 标准库的帧指针 perf 调用堆栈/火焰图?

docker - 如何使用 NGINX 入口 Controller 从 Cloudflare 恢复原始客户端 IP

DockerFile : Difference between ADD and COPY

java.net.SocketException : Connection Reset. 如何停止这个?