2016-04-20 131 views
1

我有一個應用程序,我目前通過Docker Compose文件在單個主機上運行。這些容器通過一個RabbitMQ容器相互通信(所以它們都鏈接在一起)。該應用程序開始需要比單個主機能夠提供更多的資源,所以我認爲Docker Swarm將是理想的,因爲我應該能夠通過相同的Compose文件啓動相同的一組容器,但是在分佈式節點上。Docker Swarm + Docker撰寫:在不同的節點上運行鏈接的容器?

但是,看起來鏈接容器被限制在同一個節點上,因此在多個節點上設置Docker Swarm不會導致我正在查找的容器分佈。

大使模式似乎是分離鏈接容器的推薦方式(通過爲每個節點上的鏈接容器設置代理),但是我在使用docker-compose文件時遇到了問題,因爲示例I'已經看過使用docker run設置每個節點,然後使用運行共享服務的節點的IP(在我的情況下是RMQ)來設置一個環境變量,告訴客戶端的大使容器在哪裏爲鏈接服務路由數據(如https://docs.docker.com/engine/admin/ambassador_pattern_linking/)。如何將其轉換爲Compose文件,以便我不需要知道該服務將在哪個IP上運行(因爲Docker Swarm將在Compose文件完成後決定)?

回答

3

使用鏈接是deprecated。相反,你可以create a new network和所有的容器添加到該網絡:即根據Networking documentation for Compose,這樣的網絡將自動爲您撰寫的文件創建

$ docker network create myapp 

注意。

這意味着您根本不需要設置任何鏈接或網絡,因爲Compose已經自動創建網絡,並且所有容器都應該使用其容器名稱在該網絡中可達。

還有一些限制,請看Using Compose with Swarm