29

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

目前,如果 --endpoint-mode 标志设置为“dnsrr”,则理论上在混合操作系统群上支持 Windows 工作者。这是解释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 }}'

问题

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

4

2 回答 2

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 地址。

于 2018-04-04T12:32:05.853 回答
0

我在使用stefanscherer/whoami图像时遇到了同样的问题。但是使用microsoft/dotnet-samples:aspnetapp有效,因此错误似乎与图像有关。

我正在使用以下设置:

Ubuntu 16.04

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

视窗 1803

  • 码头工人 18.03.1-ee-2
  • 以工人身份运行(以经理身份加入无效)
  • 运行 microsoft/dotnet-samples:aspnetapp
于 2018-08-07T19:04:52.220 回答