我正在这里https://docs.docker.com/get-started/part3/
关注Docker教程当我在页面教程结尾处执行命令docker swarm leave --force
时,我不断收到Error response from daemon: context deadline exceeded
以后每次我执行docker swarm leave --force
命令时,终端似乎只是挂起,它不再提供错误消息,但是除非我这样做,否则它不会返回提示我输入任何命令CTRL + C。
链接教程开头的docker swarm init
命令在这种状态下也没有响应。
docker swarm命令只能再次工作,是当我关闭我的VM实例并重新启动它时。但是,当我再次从链接中执行这些步骤时,我在docker swarm leave --force
命令中遇到了相同的错误
任何想法为何要这样做?
我正在Virtual Box中运行 Ubuntu 18.04.1 LTS ,具有 docker版本 18.09.0-rc1,内部版本6e632f7 。 / p>
我看到了另一个链接Cannot leave swarm mode,涉及相同的问题,它已有2年历史了,答案似乎是可行的或完整的,请完全删除Docker并重新安装以使其正常运行。我希望有另一种解决方法。
答案 0 :(得分:1)
好吧,我有个好消息和坏消息。
在构建大型实验性Docker集群环境时,我在2016-2017年面临同样的问题。我们正在构建具有dns负载平衡的多区域docker swarm集群。这是一个有50多个节点的集群。
一次,我们的ceph存储集群崩溃了,并导致大量集群节点崩溃。当所有节点重新联机时,我遇到的问题与您描述的相同。
好消息:
对我有用的是停止docker服务,重新启动,重新启动docker。集群上运行的所有服务都神奇地重新出现,好像什么都没发生。
坏消息:
这适用于大多数节点。一些群主从未恢复。这些节点我只是销毁了,而我又旋转了新节点以添加到群集中。
编辑:我挖出了一些用于群恢复的旧脚本。
要还原出现故障的群集管理器,您首先应备份配置并启动新实例。
mkdir /root/Backup
cp -rf /var/lib/docker/swarm /root/Backup
cp /root/Backup
tar -czvf swarm.tar.gz swarm/
scp -r user@new_host:/tmp
在新主机上还原配置
cp swarm.tar /var/lib/docker
tar -xvf swarm.tar
耗尽您的工作节点
docker node update -availability drain [node]
更新所有正在运行的服务
docker service update --force
答案 1 :(得分:1)
对于失败的管理器来说,对我有用的不是重启整个节点,而是停止docker服务,删除/var/lib/docker/swarm
目录,重启docker服务,然后读取管理器:
管理器发生故障时(失败的管理器):
sudo systemctl stop docker
sudo rm -r /var/lib/docker/swarm
sudo systemctl start docker
在经理工作时(其他正在运行的经理):
docker node demote manager-failing
docker node rm manager-failing
ssh manager-failing $(docker swarm join-token manager | tail -2)