20

我在具有 2 核 4GB ram Centos 的虚拟机中有一个 docker swarm。

在集群中,当我部署 docker 私有注册表(注册表 2.6.4)时,它显示服务状态为永远挂起。我用了 docker service ps <<registry_name>>

当我检查使用docker inspect <<task_id>>消息时,我得到了这个 “没有合适的节点(1个节点上不满足调度约束)”。

我尝试了服务重启和重新部署。

如何解决这个问题?

4

2 回答 2

15

当 compose 文件中定义的节点标签与实际节点中定义的节点标签不匹配时,我经常遇到这个问题,要么是因为我设置了错误的标签(例如拼写错误),要么是根本忘记给节点添加标签。

标记节点:

1)对于每个目标节点执行:

docker-machine ssh <manager_node_name> 'docker node update --label-add <label_name>=<label_value> <target_node_name>'

2)确保它们与撰写文件中定义的匹配。

3)在管理节点重启docker服务

例如:

撰写文件:

 dummycontainer:
    image: group/dummyimage
    deploy:
      mode: replicated
      replicas: 1
      placement:
        constraints: [node.labels.dummy_label == dummy]
      restart_policy:
        condition: on-failure

假设我想将此副本部署在名为dummy_node的节点中:

docker-machine ssh manager_node 'docker node update --label-add dummy_label=dummy dummy_node'

并在管理器节点中重新启动 docker。

最后,如果您部署,您应该期望 dummycontainer 在 dummy_node 中运行,假设在两个步骤中都正确设置了标签。否则,可以预期会看到您遇到的错误。

此致

于 2017-12-11T19:50:35.427 回答
5

我在部署服务时遇到了类似的问题,检查节点的可用性,docker node ls检查节点是否未设置drain并更新为active使用docker node update --availability active <node-id>

这将允许 swarm 在该服务的节点上运行容器。

于 2021-01-20T12:51:13.300 回答