Docker Swarm 1.2.0 の新しいバージョンと、特に再スケジュール機能をテストしています。
そのため、swarm マネージャーがインストールされた 1 つの EC2 VM と 2 つの swarm エージェント (他の 2 つの EC2 VM 上) があります。次のように群れを介してデプロイする HTTP Rest サービスがあります。
docker -H :4000 run -d -p :81 -e reschedule:on-node-failure myTestService
このコマンド ラインは正常に機能し、テスト サービスを 1 つのノード (node-1) にデプロイします。docker ps を実行すると、コンテナがノード 1 にデプロイされていることがわかります。
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
23ce231b5737 myTestService "/nodejs/bin/npm star" 3 minutes ago Up 3 minutes 0.0.0.0:32768->81/tcp distracted_sinoussi
ポート マッピングを見てください: 0.0.0.0:32768->81/tcp ホストで使用可能なポート (32768) を Docker エンジンに選択させます。
ここで、node-1 をシャットダウンすると、swarm はコンテナーを再スケジュールするはずです。群れのログを見ると、これがあります:
time="2016-04-19T13:56:31Z" level=info msg="Initializing discovery without TLS"
time="2016-04-19T13:56:31Z" level=info msg="Listening for HTTP" addr=":4000" proto=tcp
time="2016-04-19T13:56:38Z" level=info msg="Registered Engine ip-node-1 at ip.node.1:2375"
time="2016-04-19T13:56:45Z" level=info msg="Registered Engine ip-node -2 at ip.node.2:2375"
time="2016-04-19T13:58:24Z" level=error msg="Flagging engine as unhealthy. Connect failed 3 times" id="ZSWT:XLYS:D2HA:K5J3:O32D:AFVT:HUNR:ENKI:MBTC:2PVA:JIC2:X74L" name= ip-node-1
time="2016-04-19T13:58:24Z" level=error msg="Error monitoring events: unexpected EOF." id="ZSWT:XLYS:D2HA:K5J3:O32D:AFVT:HUNR:ENKI:MBTC:2PVA:JIC2:X74L" name= ip-node-1
time="2016-04-19T13:58:24Z" level=error msg="Restart event monitoring." id="ZSWT:XLYS:D2HA:K5J3:O32D:AFVT:HUNR:ENKI:MBTC:2PVA:JIC2:X74L" name= ip-node-1
time="2016-04-19T13:58:24Z" level=error msg="Error monitoring events: Get http://ip.node.1:2375/v1.15/events: dial tcp ip.node.1:2375: getsockopt: connection refused." id="ZSWT:XLYS:D2HA:K5J3:O32D:AFVT:HUNR:ENKI:MBTC:2PVA:JIC2:X74L" name=ip-node-1
time="2016-04-19T13:58:24Z" level=info msg="Rescheduled container 23ce231b57375a386909175f3dcd730720429eb4ed41d4366d5add17a30d210e from ip-node-1 to ip-node-2 as c7fe68332bc61f0f4c498848e59d3e34b58821468ce65bd4ebc92055156d5b8c"
最後の行では、コンテナーがノード 2 で再スケジュールされていることがわかります。node-2 で少し docker ps コマンドを実行してみましょう:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c7fe68332bc6 myTestService nodejs/bin/npm star" 27 seconds ago Created sleepy_hopper
したがって、コンテナーは存在しますが、実行されておらず (「作成」されただけ)、ポート マッピングは空です。
それで、ここで何がうまくいかないのですか?
ありがとうございました