docker swarm 1.2.0重新安排端口映射

时间:2016-04-19 14:28:17

标签: docker docker-swarm

我正在测试Docker Swarm 1.2.0的全新版本,特别是重新安排功能。

所以,我有一个安装了swarm管理器的EC2虚拟机和2个swarm代理(另外两个EC2虚拟机)。我有一个HTTP Rest服务,我通过swarm部署,如下所示:

docker -H :4000 run -d -p :81 -e reschedule:on-node-failure myTestService

此命令行正常工作,并在一个节点(node-1)上部署我的测试服务。 如果我运行docker ps,我会看到我的容器部署在第一节点上:

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我让docker引擎选择主机上的可用端口(32768)。

现在,如果我关闭node-1,swarm应该重新安排我的容器。如果我查看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"

在最后一行,我们可以看到容器已在node-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

所以,容器在那里但没有运行(只是“创建”),端口映射为空。

那么这里出了什么问题?

谢谢

1 个答案:

答案 0 :(得分:0)

我认为这是预期的行为。如果您使用shutdown -h now之类的安全关闭节点,则在该节点上运行的docker守护程序也可以安全地停止。这意味着,群集管理器的最后一个已知状态实际上是您的容器已停止运行,这就是他们没有开始使用新节点的原因。

尝试使用kill -9杀死节点上的docker守护程序(就像真正发生故障时一样)。容器将被重新安排,并将在另一个节点上启动。

使用swarm 1.2.1进行测试