如何在部署注册表时,在Docker Swarm中修复此问题“没有合适的节点(在1个节点上未满足调度约束)”?

24
我在一台2核4GB内存的CentOS虚拟机中搭建了一个Docker Swarm。在这个Swarm中,当我部署Docker私有仓库(registry 2.6.4)时,服务状态一直显示为“pending”。我使用 docker service ps <<registry_name>> 命令查看服务状态,再通过docker inspect <<task_id>>查看日志,发现消息为"no suitable node (scheduling constraints not satisfied on 1 node)"。我尝试了重启和重新部署服务,但问题仍未解决。请问该怎么办?

2
你找到解决方案了吗? - Tom Knapen
1
不,那个设置没有起作用。我在机器上重新安装了Docker设置。 - Arul Ranjith
4个回答

20
我经常遇到这个问题,当compose文件中定义的节点标签与实际节点中定义的标签不匹配时,可能是因为我设置了错误的标签(例如错别字)或者根本没有为节点设置标签。
要为节点添加标签,请按照以下步骤进行:
1)对于每个目标节点执行以下操作:
docker-machine ssh 'docker node update --label-add = '
2)确保它们与compose文件中定义的标签匹配。
3)在管理节点中重新启动docker服务。
例如:
Compose文件:
 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。

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

最好的祝愿


嗨,谢谢您的回复。但是我在创建普通服务时遇到了这个问题,而不是使用堆栈创建服务。 - Arul Ranjith
感谢您的帮助。我的问题是在组合文件中一个简单的拼写错误。mode.role == manager应该是node.role == manager - dǝɥɔS ʇoıןןƎ
这是我的问题,必须提供完整的主机名。 - Hari Ennekat

6

在部署服务过程中,我遇到了类似的问题,请检查节点的可用性,通过 docker node ls 命令检查节点是否未设置为 drain,如果未设置,请使用 docker node update --availability active <node-id> 命令将其更新为 active

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


0

在尝试在树莓派Swarm上部署viz时,我遇到了这个错误。

事实证明,有一个专门针对ARM架构的特定版本

docker service create \
  --name=viz \
  --publish=8080:8080/tcp \
  --constraint=node.role==manager \
  --mount=type=bind,src=/var/run/docker.sock,dst=/var/run/docker.sock \
  alexellis2/visualizer-arm:latest

0

另一种方法是除非您将其设置为所有内容,否则删除 reservations


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