Docker内部对外网络不通解决方案
697 字
3 分钟
Docker内部对外网络不通解决方案
原因分析
Docker容器(主动向外网链接时)内部依赖 NAT 与宿主机的网卡沟通,因此在1panel中如果关闭Docker的iptables自动控制,就会使得docker无法在iptables中建立NAT的规则,造成容器内无法向外界请求,表现为:
- 如果使用WordPress或者halo这些WEB服务,客户端在访问服务器页面时会保持正常,但是当打开服务的商店系统,或者要求服务向外连接下载时,返回超时
- 拿 curl -v www.baidu.com 时返回DNS解析后的IP地址,但是就是无法访问成功
- 前期应用可以正常使用,但是在容器重建后或者更新后就无法使用了
解决
方案一(打开Docker的iptables)
在使用1panel时,可以到docker的配置目录开启iptables,并且重启docker,但是要注意:打开后可能容器会向外映射,以此绕过防火墙
方法二(手动维护iptables)
需要手动通过指令维护,因此我推荐使用一下脚本,每隔3min检测一下
#!/bin/bash
# ========================# Docker NAT Masquerade 添加脚本(带日志提示)# ========================
# 要伪装的网段(你的 Docker 网络网段)SUBNET="172.18.0.0/16"
# ================================# 方式1:最常用 - 不指定出接口(绝大多数情况够用)# ================================echo "[$(date '+%Y-%m-%d %H:%M:%S')] 正在检查/添加 MASQUERADE 规则 (网段: $SUBNET) ..."
if iptables -t nat -C POSTROUTING -s "$SUBNET" -j MASQUERADE 2>/dev/null; then echo "[$(date '+%Y-%m-%d %H:%M:%S')] 规则已经存在,无需重复添加 → 跳过"else if iptables -t nat -A POSTROUTING -s "$SUBNET" -j MASQUERADE; then echo "[$(date '+%Y-%m-%d %H:%M:%S')] 成功添加 MASQUERADE 规则!" echo " → 容器现在应该可以正常访问外网了" else echo "[$(date '+%Y-%m-%d %H:%M:%S')] 【错误】添加规则失败!请检查 iptables 是否正常" exit 1 fifi
# ================================# 方式2:更推荐(指定出接口) - 更安全,建议使用# 先自己运行下面这行,得到你的公网网卡名,然后把 eth0 改成你自己的# ip route get 8.8.8.8 | awk '{print $5; exit}'# ================================# OUT_INTERFACE="eth0" # ←←← 改成你真正的公网网卡名字!!# echo ""# echo "[$(date '+%Y-%m-%d %H:%M:%S')] 检查/添加 精确版规则 (出接口: $OUT_INTERFACE) ..."
# if iptables -t nat -C POSTROUTING -s "$SUBNET" -o "$OUT_INTERFACE" -j MASQUERADE 2>/dev/null; then# echo " → 精确规则已经存在,无需添加"# else# if iptables -t nat -A POSTROUTING -s "$SUBNET" -o "$OUT_INTERFACE" -j MASQUERADE; then# echo " → 成功添加精确版 MASQUERADE 规则"# else# echo " 【错误】添加精确规则失败!"# fi# fi
echo ""echo "当前 nat POSTROUTING 规则一览(可快速确认):"iptables -t nat -L POSTROUTING -n -v --line-numbers | grep -i MASQUERADE || echo "(暂未看到 masquerade 规则)"echo ""echo "完成!可以去容器里测试 ping 8.8.8.8 / curl 1.1.1.1"要注意修改SUBNET,改为要使正常的网段
文章分享
如果这篇文章对你有帮助,欢迎分享给更多人!
Docker内部对外网络不通解决方案
https://www.cacablog.top/posts/docker_net_problem/ 相关文章 智能推荐
1
Ente部署记录
Docker部署 2026-04-18
2
重新思考Linux系统安全
Linux 2026-02-11
3
Rime配置文件(更新中)
Rime 2026-02-11
4
推荐一个看番软件Kazumi
软件推荐 2025-12-27
5
Linux使用推荐输入法词库——rime_wanxiang(万象词库)
Rime 2025-12-14
随机文章 随机推荐