我在Docker集群Swarm中使用两台服务器(仅测试),一台是Manager,另一台是Worker,但是运行命令docker stack deploy --compose-file docker-compose.yml teste2
,所有服务都在Manager和worker中运行不能接收要运行的容器,由于某些原因,Swarm无法实现在群集中分发服务并无法在Manager服务器中全部运行。
我的docker-compose.yml是否会引起该问题,或者可能是网络问题?
以下是一些设置:
systemctl stop firewalld && systemctl disable firewalld
命令以禁用防火墙; docker swarm join --token ...
; 结果docker node ls
:
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION
993dko0vu6vlxjc0pyecrjeh0 * name.server.manager Ready Active Leader 18.09.4
2fn36s94wjnu3nei75ymeuitr name.server.worker Ready Active 18.09.4
文件docker-compose.yml:
version: "3"
services:
web:
image: testehello
deploy:
replicas: 5
update_config:
parallelism: 2
delay: 10s
restart_policy:
condition: on-failure
# placement:
# constraints: [node.role == worker]
ports:
- 4000:80
networks:
- webnet
visualizer:
image: dockersamples/visualizer:stable
ports:
- 8080:8080
stop_grace_period: 1m30s
volumes:
- "/var/run/docker.sock:/var/run/docker.sock"
deploy:
placement:
constraints: [node.role == manager]
networks:
webnet:
我执行了命令docker stack deploy --compose-file docker-compose.yml teste2
在docker-compose.yml中,我对参数 placement 和 constraints 进行了注释,因为它们不起作用并且无法启动服务器上的容器,没有它们,容器在管理器中启动。通过可视化工具,所有内容都会显示在管理器中。
答案 0 :(得分:0)
首先,尝试在没有更新选项的情况下进行部署,例如:
version: "3.2"
services:
web:
image: testehello
networks:
- webnet
deploy:
mode: replicated
replicas: 2
placement:
constraints: [node.role == worker]
restart: unless-stopped
logging:
options:
max-size: 1m
networks:
webnet:
external: true
下一步,尝试添加更新选项:
version: "3.2"
services:
web:
image: testehello
networks:
- webnet
deploy:
mode: replicated
replicas: 2
placement:
constraints: [node.role == worker]
update_config:
parallelism: 1
delay: 10s
restart: unless-stopped
logging:
options:
max-size: 1m
networks:
webnet:
external: true
答案 1 :(得分:0)
我认为无法从工作节点访问图像,这就是为什么它们不接收容器的原因,请尝试使用 docker https://docs.docker.com/engine/swarm/stack-deploy/ 的本指南
附言我想你已经解决了,但以防万一。