从 linux 上的 docker 容器内部连接到主机需要打开防火墙端口

Connecting to host from inside a docker container on linux requires opening firewall port

背景: 我正在尝试让 XDebug 从 docker 容器中连接到我的 IDE(我的 php 应用程序是运行 在我的开发机器上的容器内)。在我的 Macbook 上,这样做没有问题。但是,在 linux 上,我发现在容器中,我使用的端口 (9000) 在主机网关上不可见(使用 sudo nmap -sT -p- 172.20.0.1,其中 172.20.0.1 是我在 docker).

我能够通过在我的开发机器 (sudo ufw allow 9000/tcp) 上打开端口 9000 来解决这个问题。一旦我这样做了,容器就可以在主机网关上看到端口 9000。

我的问题:这是完全必要的吗?我不喜欢打开防火墙端口的想法,这样我机器上的 docker 容器 运行 就可以连接到它。有没有更安全的替代方案?

从您告诉我们的情况来看,打开端口听起来很有必要。如果防火墙阻止了某个端口,则该端口上的所有流量都会被阻止,您将无法从主机上使用容器上的应用程序。

为了让这更安全,你可以做的是指定一个特定的接口来打开指定的端口 here:

ufw allow in on docker0 port 9000 proto tcp

显然将 docker0 替换为您机器上的 docker 界面。如果接口名称不明显,您可以通过查看 ip address show 的输出或按照步骤 找到它。