应用程序的多个实例

时间:2016-12-06 13:56:39

标签: networking docker docker-compose

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

正如您所看到的,我正在使用网络,因此我的反向代理可以与他们通信。

现在让我们运行实例:

$ 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_1proj2_db_1相关联。

我想这是因为Docker获取了第一个可用的db容器或类似的东西。

如何阻止一个项目链接到其他人的容器?

(...但仍能与我的反向代理通信)

1 个答案:

答案 0 :(得分:1)

问题是您的数据库与其他所有数据库位于同一个反向代理网络上。仅为Web服务器与之通信的代理创建一个单独的网络,并让docker-compose为所有其他容器创建默认网络,以便在内部进行内部通信:

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

networks:
  proxy:
    external:
      name: my_reverse_proxy_network