我在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。任何关于为什么会出现这种行为的想法都会受到赞赏。
答案 0 :(得分:4)
如此thread所述(重复?):
如果您使用的是私有注册表,则使用
与工作节点共享登录名和凭据非常重要docker stack deploy --with-registry-auth
----更新
从您的撰写文件中看起来您使用的是私有注册表。一般来说,如果集装箱无法成功地开始工作,他们最终会成为经理。 一些可能的原因是:
尝试删除堆栈并再次运行它。然后执行docker service ps --no-trunc {serviceName}
这可能会显示应该在另一个节点上运行服务的任务以及它失败的原因。
查看this SO thread了解更多问题排查提示。