我遇到了Docker的奇怪行为。
由于某些原因,当我在之前运行此服务的主机上使用docker service update --availability drain myHost
时,服务需要两次尝试在不同的节点上启动。
当对docker stop containerId
执行相同操作时,服务将在第一次尝试时开始。
我不认为docker负责我们的服务需要多次尝试启动,但是当节点处于排水模式而不是停靠者停止时,停止容器时必须有不同的行为,我希望找到这种差异将指出我找到服务问题的正确方向。
为了更清楚我做了什么,我将在这里提供一个简短的例子:
Node1(活动):
- Service1正在运行
Node2(有效):
- Service2正在运行
docker service update --availability drain Node2
Node1(活动):
- Service1正在运行
- Service2正在运行(两次尝试启动后)
Node2(排水):
docker service update --availability active Node2
Node1(活动):
- Service1正在运行
- Service2正在运行(没有任何变化,因为没有重新平衡发生)
Node2(有效):
(onNode1)$: docker stop serivce2
Node1(活动):
- Service1正在运行
Node2(有效):
- Service2正在运行(首次尝试后)
通过添加约束强制服务不在节点上运行时,行为是相同的。
Node1(活动):
- Service1正在运行
Node2(有效):
- Service2正在运行
docker service update --constraint-add "node.hostname != Node2" Service2
Node1(活动):
- Service1正在运行
- Service2正在运行(两次尝试启动后)
Node2(排水):
docker service update --constraint-rm "node.hostname != Node2" Service2
Node1(活动):
- Service1正在运行
- Service2正在运行(没有任何变化,因为没有重新平衡发生)
Node2(排水):
docker service update --constraint-add "node.hostname != Node1" Service2
Node1(活动):
- Service1正在运行
Node2(排水):
- Service2正在运行(两次尝试启动后)
我无法找到任何记录的差异,所以我希望stackoverflow上有人知道docker在做什么不同。