应用程序的多个实例

我有一个应用程序,我需要在同一个主机定义2个不同的环境中产生2个实例。

应用程序docker-compose.yml

version: '2' services: db: image: postgres web: image: nginx depends_on: - db networks: default: external: name: my_reverse_proxy_network 

正如你所看到的我正在使用一个networking,所以我的反向代理可以与他们沟通。

现在让我们运行这些实例:

 $ 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包含一些特定的envvariables来configurationproj2环境。

 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容器或类似的东西。

我怎样才能阻止一个项目链接到另一个的容器?

(…但仍然能够与我的反向代理进行通信)

问题是您的数据库与其他所有服务器位于相同的反向代理networking上。 创build一个单独的networking,只是代理服务器与networking服务器通话,并让docker-compose创build所有其他容器的默认networking,以在其内部进行对话:

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