大概的背景是这样的。
我有 3 个服务,分别是通过 3 个 compose.yml 管理的。 一个服务是 caddy ,作为反向代理,同时反代另外两个服务(叫它们 A 和 B 好了)。 caddy 容器通过 external network 和 A 、B 相连,并且通过容器名访问 A 和 B 。
但是服务 A 和 B 都需要访问一些被污染了的网站(比如 raw.githubusercontent.com),虽然试过设置 HTTP_PROXY/HTTPS_PROXY 等环境变量让它们走代理,但是依然有部分流量直连,因此打算再跑一个 VPN 容器来接管这两个服务的流量。
假设我跑起来了一个 VPN 容器,该怎么接管 A 和 B 的流量呢?
![]() |
1
66450146 37 天前
network_mode: container:<your_container_name>
|
![]() |
2
cnt2ex OP @66450146
考虑过这个方法了,但遇到了一些问题。 是我把背景过于简化了,没有讲清楚。因为我想着把大致背景交代一下,就能遇到解决过类似问题的人。 毕竟 V2EX 上应该有不少人都在 NAS 上通过 docker 自建自己的各种服务,应该遇到过相似的问题。 实际上,B 是包含多个容器的服务(独立的一个 compose.yml 管理的)。一个 php-fpm 容器,一个 db 容器。如主题所说,caddy 通过容器名访问并反代 php-fpm 。而 php-fpm 实际上也通过容器名访问 db 容器。如果把 php-fpm 的 network_mode 设置成 vpn 的话,就会导致 php-fpm 的 DNS 服务器也变成 VPN 的 DNS ,导致 php-fpm 通过容器名访问 db 失效了。 |
![]() |
4
xinge666 37 天前 via iPhone
我的解决方案是装一个 iStoreOS 或者 OpenWRT ,然后其他的虚拟机直接由它来获取 IP 以及科学上网
|
![]() |
5
ihciah 37 天前 via iPhone
网络互通要么扔同一个网络里,要么 veth 怼起来; dns 是更上层的另一回事。感觉扔同一个网络最简单,dns 的话只需要自己容器里起一个独立的 dnsmasq 转到 coredns 或者 8888 。
|