29

目的は、Linux サーバーと Docker For Windows を実行する Windows 10 マシンを使用して、混合 OS Docker swarm を実行することです。

現在、Windows ワーカーは、理論的には、--endpoint-mode フラグが「dnsrr」に設定されている場合、混合 OS スウォームでサポートされています。これについては、こちらで説明しています。ただし、traefik を使用して単純な docker whoami image stefanscherer/whoami image にルーティングしようとする試みは失敗しました。

最小限の失敗例

// 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 ダッシュボードを使用して、「10.0.0.12:8080」などのルールによってルーティングされる URL を見つけました。次に、これを各タスクの IP アドレスと比較します。タスクは で表示できdocker service ps、それらのアドレスは を使用して見つけられます

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

問題

マネージャーの IP に送信されたヘッダー 'Host:whoami.docker' を持つ HTTP 要求は、マネージャーにルーティングされると成功し、Windows ワーカーの Windows タスクにルーティングされると 504 ゲートウェイ タイムアウトで失敗します。

4

2 に答える 2