【发布时间】:2021-09-17 19:02:35
【问题描述】:
考虑这个 docker-compose 配置:
# docker-compose.yml
version: "3.7"
services:
app:
build: ./app
depends_on:
- db
- vpn
ports:
- "3001:3000"
db:
image: postgres
vpn:
build: ./vpn
cap_add:
- NET_ADMIN
说明
-
app是从 docker 主机通过 http://localhost:3001 访问的。 -
app需要连接到 postgresdb,这是第二个容器。 - 另外,
app需要连接到 api,该 api 只能通过 vpn 使用。这就是为什么第三个容器vpn建立所需的 vpn 连接的原因。
目标
app 容器应该能够访问此 docker-compose 环境中的其他服务,即db,并通过vpn 容器路由其其余流量,以便它可以访问vpn隧道后面的api。
我尝试过的
-
我尝试设置
network_mode的app:services: app: network_mode: "service:vpn"这会通过
vpn路由app容器的所有流量。有了这个,我可以从app容器到达vpn隧道后面的api。但这与ports: - "3001:3000"不兼容。此外,无法再从app访问db容器:ping: bad address 'db'。 -
我还尝试从
vpn容器链接db容器,希望这将使db服务可用于app。services: app: network_mode: "service:vpn" vpn: links: - db但
app仍然找不到db。 -
如果我从
vpn容器链接db容器但不在vpn容器内建立vpn 连接,db容器可以 > 从app联系。 -
并且我已经尝试将
127.0.0.1 db添加到app容器的/etc/hosts,隐约希望我可以直接到达db端口。但这也行不通。
有没有人知道如何做到这一点?
【问题讨论】:
标签: docker-compose vpn docker-networking