docker堆栈群 – 服务副本不传播Mutli服务堆栈

我在两台主机(docker compose version 3)上部署了4个服务的堆栈。 这些服务是Elasticsearch,Kibana。 Redis,Visualiser,最后是我的Web App。 我还没有设置任何资源限制。 我通过docker-machine打了两个虚拟主机,一个是2GB,另一个是1GB。 然后我增加了我的networking应用程序的副本到2副本,这解决了以下分配:

Host1(Master): Kibana,Redis, Web App ,Visualiser, WebApp

主机2(工作者): Elasticsearch

为什么Swarm Manager将Web应用程序容器分发到同一主机。 如果Web App分发到两台主机上,会不会更聪明? 除了节点标记外,我无法在文档中find任何其他方式来影响分发。 我错过了什么吗?

谢谢

比约恩

泊坞窗,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: 

Docker根据可用资源安排任务(容器); 如果两个节点具有足够的资源,则可以在任一个节点上调度容器。

最近版本的Docker默认使用“HA”调度,这意味着如果可能的话,同一个服务的任务分布在多个节点上(参见这个pull请求) https://github.com/docker/swarmkit/pull/1446