如何在部署注册表时解决此问题“docker swarm中没有合适的节点(1节点上不满足调度约束)”?

时间:2017-05-24 02:56:28

标签: docker docker-swarm docker-registry docker-swarm-mode

我在虚拟机中有一个docker swarm,有2个核心4GB内存Centos。

在我部署docker私有注册表(注册表2.6.4)时,它将服务状态永久显示为待处理。 我用了 的 docker service ps <<registry_name>>

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

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

如何解决这个问题?

2 个答案:

答案 0 :(得分:5)

当compose文件中定义的节点标签与实际节点中定义的节点标签不匹配时,我经常遇到这个问题,因为我设置了错误的标签(例如拼写错误)或者只是忘记标记节点一点都不。

标记节点:

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

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

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

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。

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

祝你好运

答案 1 :(得分:1)

我在部署服务时遇到了类似的问题,通过 docker node ls 检查节点的可用性,并检查节点是否未设置为 drain 并使用 {{ 更新为 active 1}}

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