Ubuntu 22.04下Docker容器可Ping但无法Curl URL问题求助
解决方案
针对你遇到的Ubuntu Server 22.04上Docker容器桥接网络能Ping域名但无法Curl的问题,按以下步骤排查修复:
1. 检查Docker iptables配置
Docker依赖iptables实现网络转发,apt升级可能导致该配置被重置:
- 查看当前Docker是否启用iptables:
docker info | grep -i iptables - 如果输出为
false,编辑/etc/docker/daemon.json(不存在则新建),添加:{"iptables": true} - 重启Docker服务:
systemctl restart docker
2. 修复宿主机iptables规则
确认宿主机iptables的nat表中存在Docker相关链:
- 查看nat表规则:
iptables -t nat -L -n - 如果未找到
DOCKER链,手动重建规则:iptables -t nat -N DOCKER iptables -t nat -A PREROUTING -m addrtype --dst-type LOCAL -j DOCKER iptables -t nat -A OUTPUT ! -d 127.0.0.0/8 -m addrtype --dst-type LOCAL -j DOCKER iptables -t nat -A POSTROUTING -s 172.17.0.0/16 ! -o docker0 -j MASQUERADE - 重启Docker服务生效。
3. 匹配桥接网络MTU值
宿主机网卡MTU与Docker桥接MTU不匹配会导致TCP数据包丢失:
- 查看宿主机网卡MTU(以eth0为例):
ip link show eth0 | grep mtu - 查看Docker默认桥接的MTU:
docker network inspect bridge | grep -i mtu - 如果两者不一致,编辑
/etc/docker/daemon.json添加MTU配置(替换为宿主机的MTU值):{"mtu": 1500} - 重启Docker服务。
4. 检查防火墙(ufw)规则
ufw可能阻止了Docker桥接网络的出站流量:
- 查看ufw状态:
ufw status - 如果启用了ufw,允许Docker桥接网络的出入站流量:
ufw allow in on docker0 ufw allow out on docker0 - 重载ufw规则:
ufw reload
5. 重置Docker网络配置
如果以上步骤无效,重置Docker网络栈:
- 停止所有运行的容器:
docker stop $(docker ps -aq) - 删除所有自定义网络:
docker network rm $(docker network ls -q) - 停止Docker服务并清理网络文件:
systemctl stop docker rm -rf /var/lib/docker/network/files/* systemctl start docker
内容的提问来源于stack exchange,提问作者Gambi
相关产品推荐
相关产品推荐

