背景:我试图让 XDebug 从 docker 容器内连接到我的 IDE(我的 php 应用程序在我的开发计算机上的容器内运行)。在我的 Macbook 上,执行此操作没有任何问题。但是,在 Linux 上,我发现在容器内,我使用的端口 (9000) 在主机网关上不可见(使用 sudo nmap -sT -p- 172.20.0.1 ,其中 172.20.0.1 )。 0.1 是我在 docker 中的主机网关)。
我可以通过在我的开发计算机上打开端口 9000 来解决此问题 (sudo ufw allowed 9000/tcp
)。一旦我这样做了,容器就可以看到主机网关上的端口 9000。
我的问题:这完全有必要吗?我不喜欢仅仅为了让在我的机器上运行的 docker 容器可以连接到它而打开防火墙端口的想法。有更安全的替代方案吗?
最佳答案
根据您告诉我们的情况,开放端口听起来确实有必要。如果防火墙阻止某个端口,则该端口上的所有流量都会被阻止,您将无法从主机使用容器上的应用程序。
为了提高安全性,您可以指定一个特定的接口(interface)来打开指定的端口 here :
ufw allow in on docker0 port 9000 proto tcp
显然将docker0
替换为您机器上的docker接口(interface)。您可以通过查看 ip address show
的输出或按照步骤 here 找到它。如果接口(interface)名称不明显。
关于linux - 从 Linux 上的 docker 容器内部连接到主机需要打开防火墙端口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70039002/