当 Docker 容器无法访问外部网络时,可能是由于多种原因造成的。以下是系统性的排查和解决方法:
首先确认宿主机本身可以访问外网:
ping 8.8.8.8
ping www.google.com
查看 Docker 网络设置:
docker network ls
docker inspect bridge
sudo systemctl restart docker
# 查看容器内DNS配置
docker run --rm alpine cat /etc/resolv.conf
# 如果DNS有问题,可以运行时指定
docker run --dns 8.8.8.8 --dns 8.8.4.4 ...
# 临时关闭防火墙测试
sudo systemctl stop firewalld
# 或
sudo ufw disable
# 尝试使用host网络模式测试
docker run --network host --rm alpine ping 8.8.8.8
sudo iptables -L -n
sudo iptables -P FORWARD ACCEPT
sudo apt-get install iptables-persistent
sudo iptables -F
sudo netfilter-persistent save
sudo systemctl stop firewalld
sudo systemctl disable firewalld
sudo systemctl restart docker
创建测试容器验证网络连接:
docker run --rm alpine ping -c 4 8.8.8.8
docker run --rm alpine wget -qO- ifconfig.me
如果以上方法无效,可以尝试:
# 查看Docker守护进程日志
journalctl -u docker -n 100
# 检查内核转发设置
cat /proc/sys/net/ipv4/ip_forward
希望以上方法能帮助您解决 Docker 容器无法访问外网的问题。如果问题仍然存在,可能需要根据具体环境和错误日志进行更深入的分析。