问题描述
在使用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 集群,并且应该解决容器堆叠问题。