我有一台运行 Wireguard VPN 的服务器,10.0.1.254/24
并且 Docker 正在运行172.17.0.1/16
。
我的docker-compose.yaml
样子如下(简化):
services:
container_a:
image: nginx:latest
ports:
- '10.0.1.254:80:80'
container_b:
image: alpine:latest
现在,我可以使用wget http://10.0.1.254
主机上的 nginx 访问它。我也可以通过 VPN 对等体(例如10.0.1.1
)以同样的方式访问它。但是,当我尝试从另一个 Docker 容器(例如docker compose exec container_b wget http://10.0.1.254
)内执行此操作时,会出现超时。但是,我可以 ping 主机(docker compose exec container_b ping 10.0.1.254
)。
我猜想这与 Docker 在主机上映射端口的方式有关。但我找不到太多相关信息。有人知道为什么这不起作用吗?
答案1
事实证明,我仍安装了 UFW,它已配置为允许传入连接到wg0
接口上的此端口。但系统足够聪明,可以走捷径,直接从一个虚拟 Docker 接口转到另一个虚拟 Docker 接口,绕过该wg0
接口的 ACCEPT 规则。
tail +1f /var/log/ufw.log
我通过使用,然后wget
从其他 Docker 容器运行失败的命令来解决这个问题。
就我而言,解决方案就是简单地禁用 UFW(sudo ufw disable
),因为无论如何我都不会使用它。