0

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

したがって、コンテナーは存在しますが、実行されておらず (「作成」されただけ)、ポート マッピングは空です。

それで、ここで何がうまくいかないのですか?

ありがとうございました

4

1 に答える 1

0

これは期待される動作だと思います。のような方法でノードを安全にシャットダウンすると、shutdown -h nowそのノードで実行されている docker デーモンも安全に停止されます。これは、swarm マネージャーが認識している最後の状態は、実際にはコンテナーが停止していることであり、それが新しいノードでコンテナーが開始されていない理由であることを意味します。

ノード上の docker デーモンを強制終了してみてくださいkill -9(実際に失敗したときに実際に発生するように)。コンテナーは再スケジュールされ、別のノードで開始されます。

スウォーム 1.2.1 でテスト済み

于 2016-05-06T08:40:17.890 に答える