我已經在兩臺主機(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