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

标签 linux docker networking xdebug firewall

背景:我试图让 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/

相关文章:

linux - 如何制作 'makefile"?编译错误

networking - 什么是网络中的 DMZ?

c - 如何使用标准用户捕获 TCP/IP 数据包

sockets - TCP套接字的传输时间

python - 使用 python pexpect 让多线程处理列表

在使用 BusyBox v1.19.3 创建的 linux 内核 2.6.37.6 中找不到 "Syslog.conf"

docker - 构建 docker 镜像后,如何在不推送到 docker hub 的情况下运行镜像?

docker - 在Jenkins上执行Shell脚本时,作业随机失败

postgresql - Docker-compose postgresql密码验证失败

c++ - 有没有办法从 Linux 发行版二进制文件中转储带有行号的堆栈跟踪?