Docker Swarm管理器出现奇怪的编排行为-容器堆叠问题

87次阅读
没有评论

问题描述

在使用Docker Swarm时遇到了一个问题,即管理器主机在收到启动堆栈的命令后,尝试将所有容器堆叠在自己上面,而其他工作节点/管理器节点保持空闲。不幸的是,这个问题没有任何日志记录。用户想知道是否有人在使用Docker CE时也观察到了这种行为。

解决方案

请注意以下操作注意版本差异及修改前做好备份。

方案1

首先,我们需要检查所有节点是否处于活动状态,并准备好接收任务。可以使用以下命令来检查节点的状态:

docker node ls

如果有节点处于非活动状态,可以尝试重新加入集群。首先,使用以下命令离开集群:

docker swarm leave

然后,使用以下命令重新加入集群:

docker swarm join --token <SWMTKN token> <manager private IP>

<SWMTKN token> 替换为你的 Swarm token,<manager private IP> 替换为管理器节点的私有 IP 地址。
这样,你可以尝试重新加入出现问题的节点,以解决容器堆叠问题。

方案2

如果方案1无效,你可以尝试重启出现问题的节点。首先,使用以下命令查找出现问题的节点的 ID:

docker node ls

然后,使用以下命令重启节点:

docker node update --availability drain <node ID>

<node ID> 替换为出现问题的节点的 ID。
这将使节点进入排空模式,停止接收新的任务,并将现有任务重新分配给其他节点。重启节点后,它应该重新加入集群,并且容器堆叠问题应该得到解决。

方案3

如果以上两种方案都无效,你可以尝试重新部署整个 Swarm 集群。首先,使用以下命令离开集群:

docker swarm leave --force

然后,重新初始化 Swarm 集群:

docker swarm init

最后,使用以下命令将其他节点加入集群:

docker swarm join --token <SWMTKN token> <manager private IP>

<SWMTKN token> 替换为你的 Swarm token,<manager private IP> 替换为管理器节点的私有 IP 地址。
这将重新创建一个全新的 Swarm 集群,并且应该解决容器堆叠问题。

正文完