docker - swarm 中的副本数不在工作节点中启动 (1/4)

标签 docker docker-compose docker-swarm docker-swarm-mode swarm

我在具有 1 个主节点和 3 个工作节点的 docker swarm 集群上启动了一个 flask API 服务。我已经使用以下 docker compose 文件部署了任务,

version: '3'

services:
  xgboost-model-api:
image: xgboost-model-api
  ports:
    - "5000:5000"
deploy:
  mode: global
networks:
  - xgboost-net

networks:
   xgboost-net:

我使用以下 docker swarm 命令部署了任务,
docker stack deploy --compose-file docker-compose.yml xgboost-swarm

但是,该任务仅在我的主节点上启动,而不是在任何工作节点上启动。
$ docker service ls
ID            NAME                             MODE        REPLICAS  IMAGE
pgd8cktr4foz  viz                              replicated  1/1       
dockersamples/visualizer
twrpr4av4c7f  xgboost-swarm_xgboost-model-api  global      1/4       xgboost-model-api
xxrfn1w7eqw6  dockercloud-server-proxy         global      1/1       dockercloud/server-proxy 

正在使用的 Dockerfile 是 here .任何关于为什么会发生这种行为的想法都将不胜感激。

最佳答案

如本文所述 thread (复制?):

如果您使用的是私有(private)注册表,那么通过使用与工作节点共享登录名和凭据很重要

docker stack deploy --with-registry-auth



- - 更新

从您的撰写文件来看,您似乎没有使用私有(private)注册表。一般来说,如果容器不能在 worker 身上成功启动,它们最终会在经理身上。
造成这种情况的一些可能原因是:
  • 无法访问私有(private)注册表(使用 --with-registry-auth 修复)
  • 应用程序需要对主机进行一些更改才能运行(如 elasticSearch 需要 vm.max_map_count=262144)
  • HealthCheck 在其他节点上失败,因为 helthcheck 写得不好
  • 阻止拉取图像的网络设置问题

  • 尝试删除您的堆栈并再次运行它。然后做docker service ps --no-trunc {serviceName}这可能会向您显示应该在另一个节点上运行该服务的任务以及它失败的原因。

    查看 this SO thread了解更多故障排除提示。

    关于docker - swarm 中的副本数不在工作节点中启动 (1/4),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46522185/

    相关文章:

    docker - 我应该使用 docker-compose up 还是运行?

    docker - 在puckel/docker-airflow中启用凭据

    postgresql - 用户 "postgres"的 Docker 密码验证失败

    jenkins - Docker - 从一个链接容器向另一个容器发出命令

    docker swarm 模式下的数据库迁移

    docker - Docker群

    docker - 无法从 logstash docker 容器连接到 kafka docker 容器

    linux - 默认用户未添加到 docker 组,必须执行 su $USER?

    docker-compose 目录以在路径中构建

    docker - Docker群带来了太多的进程