bash
# 测试宿主机网络
ping 8.8.8.8
# 如果失败,检查宿主机网络配置
bash
# 修改Docker的DNS配置
sudo vim /etc/docker/daemon.json
添加内容:
json
{
"dns": ["8.8.8.8", "8.8.4.4"]
}
然后重启Docker服务:
bash
sudo systemctl restart docker
解决方法:
# 临时关闭防火墙(不推荐生产环境)
sudo systemctl stop firewalld
# 或
sudo ufw disable
# 更好的方式是添加适当规则
sudo iptables -I FORWARD -j ACCEPT
解决方法:
# 查看当前网络模式
docker network ls
# 创建新网络并指定驱动
docker network create --driver bridge my_network
# 运行容器时指定网络
docker run --network=my_network -it ubuntu bash
bash
# 运行容器时设置环境变量
docker run -e http_proxy=http://proxy.example.com:8080 \
-e https_proxy=http://proxy.example.com:8080 \
-it ubuntu bash
解决方法:
# 检查网络命名空间
ip netns list
# 如果没有显示,尝试
ln -s /var/run/docker/netns /var/run/netns
检查容器内网络连接:
docker exec -it <container_name> ping 8.8.8.8
检查DNS解析:
docker exec -it <container_name> nslookup google.com
检查路由表:
docker exec -it <container_name> route -n
检查网络接口:
docker exec -it <container_name> ip addr
检查Docker网络配置:
docker network inspect bridge
sudo systemctl stop docker
sudo ip link set docker0 down
sudo brctl delbr docker0
sudo systemctl start docker
docker run --network=host -it ubuntu bash
# 查看当前MTU
ifconfig | grep mtu
# 如果MTU不匹配,可以尝试修改
sudo ifconfig docker0 mtu 1500
希望这些方法能帮助您解决Docker容器无法上网的问题。根据具体情况选择适合的解决方案。