首页 > 解决方案 > 停止容器时的不同行为(docker stop vs drain)

问题描述

我在使用 docker 时遇到了一种奇怪的行为。

docker service update --availability drain myHost出于某种原因,当我在之前运行该服务的主机上使用时,服务需要两次尝试在不同的节点上启动。

docker stop containerId对服务执行相同操作时,将在第一次尝试时启动。

我不认为 docker 负责我们的服务需要多次尝试启动,但是当节点处于排水模式与 docker stop 时停止容器必须有不同的行为,我希望发现这种差异会指出我找到正确的方向来发现我们服务的问题。

为了更清楚我的工作,我将在这里提供一个简短的示例:

  1. 初始情况

节点 1(活动):

  • 服务 1 正在运行

节点 2(活动):

  • 服务 2 运行
  1. docker service update --availability drain Node2

节点 1(活动):

  • 服务 1 正在运行
  • Service2 Running(两次尝试启动后)

节点 2(漏极):

  1. docker service update --availability active Node2

节点 1(活动):

  • 服务 1 正在运行
  • Service2 Running(没有任何变化,因为没有发生重新平衡)

节点 2(活动):

  1. (onNode1)$: docker stop serivce2

节点 1(活动):

  • 服务 1 正在运行

节点 2(活动):

  • Service2 正在运行(第一次尝试后)

通过添加约束来强制服务不在节点上运行时,行为是相同的。

  1. 初始情况

节点 1(活动):

  • 服务 1 正在运行

节点 2(活动):

  • 服务 2 运行
  1. docker service update --constraint-add "node.hostname != Node2" Service2

节点 1(活动):

  • 服务 1 正在运行
  • Service2 Running(两次尝试启动后)

节点 2(漏极):

  1. docker service update --constraint-rm "node.hostname != Node2" Service2

节点 1(活动):

  • 服务 1 正在运行
  • Service2 Running(没有任何变化,因为没有发生重新平衡)

节点 2(漏极):

  1. docker service update --constraint-add "node.hostname != Node1" Service2

节点 1(活动):

  • 服务 1 正在运行

节点 2(漏极):

  • Service2 Running(两次尝试启动后)

我找不到任何差异记录,所以我希望 stackoverflow 上有人知道 docker 的不同之处。

标签: dockerdocker-swarm

解决方案


推荐阅读