当 Docker 容器突然无法访问外网时,可以按照以下步骤排查和解决问题:
bash
ping 8.8.8.8 # 测试基础网络
curl -I https://www.google.com # 测试DNS和HTTP
bash
systemctl status docker # Linux
bash
systemctl restart docker # Linux
bash
docker network ls
bridge
网络是否正常:
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 docker
bash
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 docker
json
{
"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
输出。