2016-12-06 123 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/)缺少设置) –