Цель состоит в том, чтобы создать смешанный роуд Docker для ОС, работающий на Linux-серверах и машинах Windows 10, работающих под управлением Docker для Windows
В настоящее время работники Windows теоретически поддерживаются на смешанных ролях os, если флаг -endpoint-mode установлен на "dnsrr". Это объясняется здесь. Однако попытки использовать traefik для перехода к простому снимку изображения 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 }}'
Проблема
HTTP-запрос с заголовком "Host: whoami.docker", отправленный на IP-адрес менеджера, будет успешным при перенаправлении к диспетчеру и завершится неудачей с 504 Тайм-аут шлюза при перенаправлении в Windows Task на рабочем столе Windows.