通过启用 ip_forward 解决Docker容器网络连接问题
·
一、背景
在Docker容器化部署MySQL中,容器端口映射正确(-p 3306:3306),但外部网络仍无法访问容器服务,且已排除防火墙、安全组等常规问题。
二、问题现象
根本原因:Linux内核IP转发功能未开启
- 容器状态正常(docker ps显示Up),端口映射已配置(如0.0.0.0:3306->3306/tcp)。
- 宿主机内部可访问容器服务(如docker exec -it mysql -u root -p),但外部网络(如另一台服务器)通过nc -zv <宿主机IP> 3306测试时,返回Connection timed out。
三、原因分析
Linux内核的ip_forward参数控制IP数据包的转发行为:
- 当ip_forward=0(默认值)时,内核不会转发来自不同网络接口的IP包,导致Docker容器(通过虚拟网络接口如docker0)的网络流量无法到达宿主机物理网卡,进而无法转发到外部网络。
- 当ip_forward=1时,内核允许转发跨网络接口的IP包,容器网络流量可通过宿主机物理网卡访问外部网络,反之亦然(外部请求可到达容器)。
四、解决方案
说明:
/etc/sysctl.conf是系统启动时加载的配置文件,添加net.ipv4.ip_forward=1后,重启系统仍保持该设置。
修改方法
- 修改下/etc/sysctl.conf配置文件将net.ipv4.ip_forward =0改为1
- 加载配置(使修改立即生效,sudo sysctl -p)
更多推荐

所有评论(0)