我如何找出为什么我的 Docker 服务处于 Pending 状态?

How do I find out why my Docker service is in Pending state?

我正在玩 Docker Swarm,并使用 docker-compose.ymldocker deploy。所有服务都已部署,但一个服务仍处于 Pending 状态。我添加了一个约束,将此服务绑定到其中一个节点。我的问题与其说是关于这个特定问题,不如说是关于如何排除故障。 Docker 文档提到了服务处于挂起状态的可能原因,但其中 none 个适用(约束问题、资源消耗)。

我能在某处看到 docker 群 'thought process' 吗?它在想什么?

编辑:应该更清楚地表明我正在使用 1.12 引入的新 swarm 选项。

docker run swarm 有一个 --debug 选项可以告诉你更多。

请参阅 docker swarm issue 2341 or docker issue 24982 以查看用于调试挂起状态的选项。

例如:

(unknown): 192.168.99.106:2375(node2 ip)
└ ID:
└ Status: Pending
└ Containers: 0
└ Reserved CPUs: 0 / 0
└ Reserved Memory: 0 B / 0 B
└ Labels:
└ Error: Cannot connect to the Docker daemon. Is the docker daemon running on this host?....

在dockerswarm模式下服务没有正常启动的情况下,我会解释如何调试。

首先,获取任务ID为docker service ps <service-name>

接下来,用docker inspect <task-id>检查元数据很有用。特别是status字段中有container start before Error message,然后再确认是否以预期的参数启动。

如果任务有容器ID,启动容器后异常退出,所以查看容器的日志docker logs <container-id>

我希望这会有所帮助。