使用Traefik的Docker Swarm Windows Worker返回Gateway Timeout

时间:2017-08-22 16:04:17

标签: docker tcp-ip docker-swarm traefik bad-gateway

目标是使用Linux服务器和运行Docker For Windows的Windows 10计算机运行混合OS Docker swarm

目前Windows工作者理论上支持混合操作系统群,前提是--endpoint-mode标志设置为“dnsrr'”。这是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的路由,例如&#39; 10.0.0.12:8080&#39 ;.然后,我将其与每项任务的IP地址进行比较,可以使用docker service ps查看任务,并查看其地址&#39;发现使用

docker inspect <taskID> \
    --format '{{ range .NetworksAttachments }}{{ .Addresses }}{{ end }}'

问题

带有标题&#39; Host:whoami.docker&#39;的HTTP请求发送到管理器的IP将在路由到管理器时成功,并在路由到Windows工作服务器上的Windows任务时失败并且504网关超时。

2 个答案:

答案 0 :(得分:3)

你错过了设置--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地址。

答案 1 :(得分:0)

使用stefanscherer/whoami图片时,我遇到了同样的问题。尽管使用microsoft/dotnet-samples:aspnetapp可以工作,所以错误似乎与图像有关。

我正在使用以下设置:

Ubuntu 16.04

  • Docker 18.03.1-ce
  • 以管理员身份运行
  • 运行traefik

Windows 1803

  • Docker 18.03.1-ee-2
  • 以工作人员身份运行(以Manager身份加入无法正常工作)
  • 运行microsoft / dotnet-samples:aspnetapp