Docker蜂拥而至--force-超出了上下文期限

时间:2018-11-07 20:04:46

标签: docker ubuntu virtualbox docker-swarm

我正在这里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并重新安装以使其正常运行。我希望有另一种解决方法。

2 个答案:

答案 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)