我已经在两台主机(docker compose version 3)上部署了一个包含4个服务的堆栈。 服务是Elasticsearch,Kibana。 Redis,Visualiser,最后是我的Web App。我还没有设置任何资源限制。 我通过docker-machine创建了两个虚拟主机,一个使用2GB,另一个使用1GB。 然后,我增加了我的web应用程序的副本,以2个副本,从而解决以下分配:码头堆栈群 - 服务副本没有传播到Mutli服务堆栈
主机1(主): Kibana,Redis的,Web App的,Visualiser的,Web应用程序
主机2(工人): Elasticsearch
为什么群经理中分发Web应用程序容器对同一台主机。如果将Web App分发到两个主机,这不是更聪明吗? 除了节点标记,我无法在文档中找到任何其他方式来影响分发。 我错过了什么吗?
感谢
比约恩
泊坞窗,compose.yml
version: "3"
services:
visualizer:
image: dockersamples/visualizer:stable
ports:
- "8080:8080"
volumes:
- "/var/run/docker.sock:/var/run/docker.sock"
deploy:
placement:
constraints: [node.role == manager]
networks:
- webnet
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:5.4.3
environment:
ES_JAVA_OPTS: -Xms1g -Xmx1g
ulimits:
memlock: -1
nofile:
hard: 65536
soft: 65536
nproc: 65538
deploy:
resources:
limits:
cpus: "0.5"
memory: 1g
volumes:
- esdata:/usr/share/elasticsearch/data
ports:
- 9200:9200
- 9300:9300
networks:
- webnet
web:
# replace username/repo:tag with your name and image details
image: bjng/workinseason:swarm
deploy:
replicas: 2
restart_policy:
condition: on-failure
ports:
- "80:6000"
networks:
- webnet
kibana:
image: docker.elastic.co/kibana/kibana:5.4.3
deploy:
placement:
constraints: [node.role == manager]
ports:
- "5601:5601"
networks:
- webnet
redis:
image: "redis:alpine"
networks:
- webnet
volumes:
esdata:
driver: local
networks:
webnet:
请附上您的码头工人,compose.yml文件和你的版本的码头。 – BMitch
@BMitch 谢谢,我用docker-compose.yml编辑了我的帖子 我的版本是 'Docker version 17.06.0-ce,build 02c1d87' –
首先猜测是1g内存限制弹性用完了主机对工作人员的限制。第二个猜测是,你可能已经用sha256在本地构建了镜像,工作人员无法从注册表中拉出(17.06,这不再发生在另一个标志上)。我最初的猜测是,你有一个老版本的Docker,它会统计主机上的其他容器,或者你有一个约束在Web应用程序上运行的经理,但这两者都不适合你。 – BMitch