我有一个应用程序,我需要在定义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_1
与proj2_db_1
相关联。
我想这是因为Docker获取了第一个可用的db容器或类似的东西。
如何阻止一个项目链接到其他人的容器?
(...但仍能与我的反向代理通信)
答案 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