我有一個應用程序,我需要在定義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容器或類似的東西。
如何防止一個項目鏈接到另一個的容器?
(...但仍然能夠與我的反向代理進行通信)
有,爲什麼你想有2理由撰寫文件,而不是把你的整個設置放在一個文件中? – hecko84
你在說「proj2-overrides.yml」嗎?這個文件是'docker-compose.yml'的擴展,這就是爲什麼我要加載proj2的原因。它只包含proj2的特定設置,即:環境變量。 –
不,我的意思是爲什麼你需要docker-compose.yml和proj2-overrides.yml,而不是隻有一個組合文件,因爲兩個實例都運行在同一個碼頭主機上。無論如何,env變量可以由服務來定義,所以目前我沒有在那裏看到需要。我的意思是你可以把proj2_web_1,proj1_web_1容器放在同一個組成部分。一般來說,我只是覺得我沒有正確地回答這個問題。 – hecko84