2

我有一個簡單的撰寫文件,其中我有三個服務A,B和C.A和B都依賴於C(即對C具有links)。這裏的簡化摘自docker-compose.yml多主機Docker在Swarm上撰寫應用程序

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上泊塢窗羣並啓用覆蓋通過領事密鑰存儲網絡。我一直在努力爭取一段時間才能正常工作(我必須手動將機器的內核升級到linux 3.16)。

我使用泊塢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,但ServiceAServiceB崩潰許多嘗試連接到kafka,因爲他們無法找到它後撰寫的。當我嘗試使用顯式links並啓用覆蓋爲這個應用程序I get an error

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當我想啓用多主機!但是,那麼我如何運行一個組合應用程序,在這裏我已經在容器之間建立了依賴關係,並在碼頭羣上擴展了容器?

+0

docker 1.9中的新網絡功能使用共享網絡上的IP主機發現來代替鏈接。請參閱以下答案:http://stackoverflow.com/questions/33785804/docker-networking-on-single-host-with-compose/33791395#33791395 –

+0

此消息只是一個警告(不是錯誤)。我認爲它應該在郵件上有一個「警告」前綴,對吧?它只是在複製/粘貼中被切斷。 – dnephin

+0

@dnephin我沒有完整的信息,我在看到問題後的一天發佈了此主題。 – bachr

回答

1

你不需要明確的鏈接了。網絡應鏈接相同用戶定義網絡上的所有容器。撰寫基於項目名稱爲您創建一個默認網絡。

0

要表示容器或服務之間的依賴關係,可以使用docker-compose.yml文件中的配置選項depends_on,但使用version 2文件格式。

所以,你的搬運工,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將在ServiceAServiceB之前啓動。

注:,如果你使用的是與links沿version 1文件格式,應用程序將工作,但Swarm將安排一臺主機上所有容器,因爲容器之間links不跨主機與舊的網絡系統工作。