群中的副本数量不会在工作节点中启动(1/4)

时间:2017-10-02 08:42:07

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

我在docker swarm集群上启动了一个烧瓶API服务,其中包含1个主节点和3个工作节点。我使用以下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。任何关于为什么会出现这种行为的想法都会受到赞赏。

1 个答案:

答案 0 :(得分:4)

如此thread所述(重复?):

如果您使用的是私有注册表,则使用

与工作节点共享登录名和凭据非常重要
  

docker stack deploy --with-registry-auth

----更新

从您的撰写文件中看起来您使用的是私有注册表。一般来说,如果集装箱无法成功地开始工作,他们最终会成为经理。 一些可能的原因是:

  1. 无法访问私人注册表(使用--with-registry-auth修复)
  2. 应用程序需要对主机进行一些更改才能运行(如elasticSearch需要vm.max_map_count = 262144)
  3. 由于helthcheck写得不好,HealthCheck在其他节点上失败
  4. 阻止拉图像的网络设置问题
  5. 尝试删除堆栈并再次运行它。然后执行docker service ps --no-trunc {serviceName}这可能会显示应该在另一个节点上运行服务的任务以及它失败的原因。

    查看this SO thread了解更多问题排查提示。