[英]Multi-host Docker compose application on Swarm
我有一個簡單的撰寫文件,其中有三個服務 A、B 和 C。A 和 B 都依賴於 C(即有到 C 的links
)。 這是docker-compose.yml
的簡化摘錄:
kafka:
image: spotify/kafka
environment:
ADVERTISED_PORT: 9092
ports:
- "2181:2181"
- "9092:9092"
ServiceA:
image: elsoufy/myimage
command: ./mycommand -role producer -queue kafka:9092
ports:
- "8080"
ServiceB:
image: elsoufy/myimage
command: ./mycommand -role consumer -queue kafka:9092
我已經在 AWS 上設置了一個 Docker 群,並通過 consul 密鑰庫啟用了覆蓋網絡。 我一直在努力讓它正常工作(我不得不手動將機器的內核升級到linux 3.16 )。
我正在使用 Docker 1.9
Client:
Version: 1.9.0
API version: 1.21
Go version: go1.4.3
Git commit: 76d6bc9
Built: Tue Nov 3 19:20:09 UTC 2015
OS/Arch: darwin/amd64
Server:
Version: 1.9.0
API version: 1.21
Go version: go1.4.3
Git commit: 76d6bc9
Built: Tue Nov 3 19:20:09 UTC 2015
OS/Arch: linux/amd64
我可以使用docker-compose up -d
成功啟動組合,但是ServiceA
和ServiceB
在多次嘗試連接到kafka
后崩潰,因為他們找不到它。 當我嘗試使用顯式links
並為此應用啟用覆蓋時, 出現錯誤:
docker-compose --x-networking --x-network-driver=overlay up
links, which are not compatible with Docker networking and will be ignored. Future versions of Docker will not support links - you should remove them for forwards-compatibility.
當我想啟用多主機時,我似乎無法使用links
!! 但是,我如何運行一個組合應用程序,其中我在容器之間具有依賴關系並在 docker swarm 上擴展容器?
您不再需要顯式鏈接。 網絡應該鏈接同一個用戶定義網絡上的所有容器。 Compose 根據項目名稱為您創建一個默認網絡。
要表達容器或服務之間的依賴關系,您可以使用depends_on
docker-compose.yml
文件中的配置選項depends_on
,但使用version 2
文件格式。
所以你的 docker-compose.yml 文件應該看起來像這樣:
version: '2'
services:
kafka:
image: spotify/kafka
environment:
ADVERTISED_PORT: 9092
ports:
- "2181:2181"
- "9092:9092"
ServiceA:
image: elsoufy/myimage
command: ./mycommand -role producer -queue kafka:9092
ports:
- "8080"
depends_on:
- kafka
ServiceB:
image: elsoufy/myimage
command: ./mycommand -role consumer -queue kafka:9092
depends_on:
- kafka
networks:
...
docker-compose up
將按依賴順序啟動服務。 在上面的例子中, kafka
將在ServiceA
和ServiceB
之前啟動。
注意:如果您使用version 1
文件格式和links
,您的應用程序將可以工作,但Swarm
會將所有容器安排在一台主機上,因為容器之間的links
不能跨主機使用舊網絡系統。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.