我有一个应用程序,我需要在定义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