Docker Swarm服务卡在准备阶段

7
我有一个Swarm堆栈已部署,我从堆栈中移除了几个服务并尝试重新部署它们。这些服务显示为期望状态为“remove”,当前状态为“preparing”.. 它们的名称也从自定义服务名称更改为随机的Docker名称。Swarm还尝试启动这些服务,但这些服务也停留在“preparing”状态。我在所有节点上运行了docker system prune,然后删除了堆栈。堆栈中的所有服务都不再存在,除了随机的服务。现在我无法删除它们,它们仍处于“preparing”状态。这些服务在Swarm中没有任何地方运行,但我想知道是否有方法可以将它们删除。

请参考以下链接:https://dev59.com/zVoT5IYBdhLWcg3wjwB-#39336501 - Pratik
1个回答

6
我遇到了同样的问题。后来发现,'Preparing' 表示 docker 正在尝试从 Docker Hub 拉取镜像,但是在上述版本 '3.1' 的 docker-compose 中,docker service logs <serviceName> 中没有清晰的指示符。
但有时会因为网络带宽或其他 docker 内部原因而导致延迟。
希望这可以帮助你!如果我找到更多相关信息,我会更新答案。
附:我发现切换命令到 docker-compose up 后,docker stack deploy -c <your-compose-file> <appGroupName> 不会卡顿。对于我来说,下载镜像要花费 20 多分钟,原因不明。
因此,证明了 docker stack deploy 没有开放问题,
添加 Christian 的参考并完成这个答案。
使用 docker-machine ssh 连接到特定机器:
docker-machine ssh <nameOfNode/Machine>

您的提示将发生变化。您现在位于另一台计算机内部。在这台计算机内执行以下操作:

tail -f /var/log/docker.log

您会在该计算机的“守护进程”日志中看到相关记录。您可以从中了解该特定守护进程是在进行“拉取”操作还是服务准备的其他步骤。以我的情况为例,我发现如下内容:
time="2016-09-05T19:04:07.881790998Z" level=debug msg="pull progress map[progress:[===========================================>       ] 112.4 MB/130.2 MB status:Downloading

这让我意识到它只是从我的Docker帐号下载了一些图像。


1
它并不总是关于下载图像。我认为Docker将服务部署排队到Swarm节点,有时队列需要很长时间才能执行其中的所有任务。 - tkyass
1
重要的是Swarm决定运行镜像的机器可以访问Docker注册表。例如,我们的管理者能够拉取镜像,但当我们扩容时,工作节点没有访问权限,导致服务停滞不前。 - Chris

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接