当 Docker 容器突然无法访问外网时,可以按照以下步骤排查和解决问题:
bash
ping 8.8.8.8 # 测试基础网络
curl -I https://www.google.com # 测试DNS和HTTPbash
systemctl status docker # Linuxbash
systemctl restart docker # Linuxbash
docker network lsbridge 网络是否正常:
bash
docker inspect bridge"Gateway":应为宿主机的 Docker 网桥 IP(如 172.17.0.1)。"IPAM.Config":子网配置是否合理。bash
docker exec -it <容器名> sh
ping 8.8.8.8 # 测试基础连通性
nslookup google.com # 测试DNS解析/etc/resolv.conf 文件是否包含有效 DNS(如 8.8.8.8 或宿主机的 DNS)。iptables/ufw/firewalld)可能阻止了容器的出站流量:
bash
iptables -L -n # 查看规则
iptables -P FORWARD ACCEPT # 临时允许转发流量bash
systemctl stop docker
rm -rf /var/lib/docker/network
systemctl start dockerbash
docker run --dns 8.8.8.8 --dns 8.8.4.4 .../etc/docker/daemon.json):
json
{
"dns": ["8.8.8.8", "1.1.1.1"]
}
然后重启 Docker:
bash
systemctl restart dockerjson
{
"ipv6": false
}host 网络模式测试:
bash
docker run --network=host ...HTTP_PROXY 环境变量。systemctl restart docker。iptables -L -n。docker exec -it <容器> cat /etc/resolv.conf。如果问题仍存在,提供以下信息以便进一步排查:
- docker info
- docker network inspect bridge
- 容器内的 ifconfig 和 route -n 输出。