Docker 容器访问外部网络的流程是:容器流量 → 宿主机的 Docker 桥接网络(172.18.0.0/16)→ 宿主机的 FORWARD
链转发 → 宿主机网关(192.168.13.1)→ 外部网络
问题现象与环境说明
基本环境
- 宿主机系统:Linux(Ubuntu/Debian 系)
- 宿主机内网 IP:
192.168.13.2
,网关:192.168.13.1
- Docker 网络:通过 1Panel 创建的
1panel-network
(bridge 模式) - 网络配置:子网
172.18.0.0/16
,网关172.18.0.1
,容器 IP 均为此网段(如172.18.0.2
、172.18.0.3
等)
这是我的容器默认使用的docker网络,先确定网络的子网是啥,然后配置流量转发就可以了。
我的解决流程:(改成你自己的子网ip) 执行以下命令,允许容器子网(172.18.0.0/16)通过宿主机转发访问外部网络,并允许返回流量:
bash
# 允许容器子网(172.18.0.0/16)访问外部网络(新连接和相关返回连接)
sudo iptables -I FORWARD -s 172.18.0.0/16 -j ACCEPT
sudo iptables -I FORWARD -d 172.18.0.0/16 -m state --state RELATED,ESTABLISHED -j ACCEPT
• 第一条规则:允许容器主动发起的新连接(如访问 www.bing.com)。
• 第二条规则:允许外部网络对容器的返回流量(如网页响应)。