当 Docker 容器无法解析域名时,可以按照以下步骤排查和解决问题:
# 查看容器的 DNS 配置
docker run --rm alpine cat /etc/resolv.conf
如果发现 DNS 配置不正确,可以通过以下方式指定 DNS:
# 启动容器时指定 DNS 服务器
docker run --dns 8.8.8.8 --dns 8.8.4.4 your_image
确保宿主机可以正常解析域名:
nslookup example.com
ping example.com
修改 Docker 守护进程配置(通常位于 /etc/docker/daemon.json
):
{
"dns": ["8.8.8.8", "8.8.4.4"]
}
然后重启 Docker 服务:
sudo systemctl restart docker
某些网络模式(如 --network=host
)会直接使用宿主机的网络配置:
# 尝试使用 host 网络模式
docker run --network=host --rm alpine nslookup example.com
检查是否有防火墙规则阻止了 DNS 查询(通常是 UDP 53 端口)。
创建自定义网络并测试:
docker network create mynet
docker run --network=mynet --rm alpine nslookup example.com
docker run --rm tutum/dnsutils dig example.com
docker run --rm alpine sh -c "nslookup example.com; cat /etc/resolv.conf"
docker network inspect bridge
/etc/resolv.conf
的操作如果以上方法都不能解决问题,可能需要考虑更详细的网络环境分析,包括公司网络策略、VPN 配置等。
希望这些方法能帮助您解决 Docker 域名解析问题!