2016-12-06 121 views
0

我有一個應用程序,我需要在定義2個不同環境的同一主機中產生2個實例。應用程序的多個實例

應用泊塢窗,compose.yml

version: '2' 
services: 
    db: 
    image: postgres 
    web: 
    image: nginx 
    depends_on: 
     - db 

networks: 
    default: 
    external: 
     name: my_reverse_proxy_network 

正如你可以看到我使用的網絡,所以我的反向代理可以與他們溝通。

現在讓我們運行情況:

$ docker-compose -p proj1 up -d 
Creating proj1_db_1 
Creating proj1_web_1 

$ docker-compose -p proj2 -f docker-compose.yml -f proj2-overrides.yml up -d 
Creating proj2_db_1 
Creating proj2_web_1 

proj2-overrides.yml包含一些特定的ENV變量配置proj2環境。

version: '2' 
services: 
    web: 
    environment: 
     HOST: proj2.myapp.net 

這裏是我的問題:

$ docker ps 
CONTAINER ID ... NAMES 
23a13acd4ffc ... proj2_web_1 
dbeea953f805 ... proj2_db_1 
df376b9ee400 ... proj1_web_1 
bf246e503fc6 ... proj1_db_1 
a06064cb0660 ... my_reverse_proxy 

$ docker inspect -f '...{{.IPAddress}}...' bf246e503fc6 
172.21.0.3 

$ docker exec -ti proj1_web_1 ping db 
PING db (172.21.0.5): 56 data bytes 
64 bytes from 172.21.0.5: icmp_seq=0 ttl=64 time=0.079 ms 

proj1_web_1鏈接到proj2_db_1

我想這是因爲Docker需要第一個可用的db容器或類似的東西。

如何防止一個項目鏈接到另一個的容器?

(...但仍然能夠與我的反向代理進行通信)

+0

有,爲什麼你想有2理由撰寫文件,而不是把你的整個設置放在一個文件中? – hecko84

+0

你在說「proj2-overrides.yml」嗎?這個文件是'docker-compose.yml'的擴展,這就是爲什麼我要加載proj2的原因。它只包含proj2的特定設置,即:環境變量。 –

+0

不,我的意思是爲什麼你需要docker-compose.yml和proj2-overrides.yml,而不是隻有一個組合文件,因爲兩個實例都運行在同一個碼頭主機上。無論如何,env變量可以由服務來定義,所以目前我沒有在那裏看到需要。我的意思是你可以把proj2_web_1,proj1_web_1容器放在同一個組成部分。一般來說,我只是覺得我沒有正確地回答這個問題。 – hecko84

回答

1

的問題是,你的數據庫是相同的反向代理網絡,一切的。只是,這些Web服務器交談的代理創建一個單獨的網絡,並讓搬運工,撰寫創建默認網絡對所有其他容器本身之間的內部談話:

version: '2' 
services: 
    db: 
    image: postgres 
    web: 
    image: nginx 
    depends_on: 
     - db 
    networks: 
     - default 
     - proxy 

networks: 
    proxy: 
    external: 
     name: my_reverse_proxy_network 
+0

我試過了,它不允許我的反向代理進行通信與我的網絡服務。我不明白爲什麼。 –

+0

檢查您的Web服務和反向代理網絡可能有助於調試。 – BMitch

+1

這是工作,我只有在我的反向代理(在這種情況下[Traefik](https://traefik.io/)缺少設置) –