Docker pull 时出现 DNS 解析超时错误

本文适用于:

  • • Docker 20+ / 24+
  • • 国内网络环境
  • • Windows WSL / Docker Desktop 用户
  • • Docker 使用的 DNS 服务器无法访问外网
  • • 遇到 DNS 解析超时错误

⚠️ 重要提示

这是 Docker 使用的 DNS 服务器无法访问外网导致的,不是镜像仓库的问题。

解决方案优先级:

  • 方案 1:配置 Docker 公共 DNS(推荐,适用于所有系统)
  • 方案 2:修复 WSL/Docker Desktop DNS(Windows 特有)
  • 方案 3:使用 hosts 文件(临时方案)

✅ 推荐做法

/etc/docker/daemon.json 中配置公共 DNS(223.5.5.5、114.114.114.114)。Windows WSL 用户需要额外修改 /etc/resolv.conf 并禁止自动重置。

当您在拉取镜像时遇到 DNS 解析超时错误,Docker 无法解析镜像仓库域名,导致 docker pull 无法正常工作。

错误示例

docker pull xxx.xuanyuan.run/cp2k/cp2k:2025.2_openmpi_cascadelake_psmp Error response from daemon: Get "http://xxx.xuanyuan.run/v2/": dial tcp: lookup xxx.xuanyuan.run on 172.27.32.1:53: read udp 172.27.32.103:38726->172.27.32.1:53: i/o timeout

错误含义

核心报错信息:

dial tcp: lookup xxx.xuanyuan.run on 172.27.32.1:53: i/o timeout

这是 DNS 解析超时错误。Docker 尝试向本地 DNS 服务器(172.27.32.1:53)发送域名解析请求,但在超时时间内没有收到响应。

简而言之:Docker 客户端无法解析域名 → 镜像仓库地址解析失败 → docker pull 无法进行

常见原因

原因类型说明
Docker DNS 不可用Docker 默认使用宿主机的 DNS,但 WSL 或 Docker Desktop 内部虚拟网卡(如 172.27.32.1)的 DNS 无法访问外网
宿主机 DNS 配置错误/etc/resolv.conf 配置不正确或指向的 DNS 服务器无响应
域名解析问题自定义域名(如 *.xuanyuan.run)在公网 DNS 中无法正确解析
网络干扰防火墙、公司网络策略或代理工具阻断了 DNS 请求

解决方案

✅ 方案 1:在 Docker 配置中手动指定公共 DNS

步骤 1:编辑 Docker 配置文件(Linux 通常位于 /etc/docker/daemon.json

sudo nano /etc/docker/daemon.json

步骤 2:添加或修改为以下内容:

{ "dns": ["223.5.5.5", "114.114.114.114"] }

步骤 3:保存后重启 Docker 服务

sudo systemctl restart docker

步骤 4:重新尝试拉取镜像

docker pull xxx.xuanyuan.run/镜像名:标签

✅ 方案 2:验证域名解析并配置 hosts(如果 DNS 无法解析)

步骤 1:在宿主机或容器中测试域名解析

nslookup xxx.xuanyuan.run
# 或使用 dig 命令
dig xxx.xuanyuan.run

如果超时或返回 SERVFAIL,说明 DNS 确实存在问题。

步骤 2:可以尝试使用本地 hosts 文件解析(临时方案)

sudo nano /etc/hosts

添加一行(请替换为实际的 IP 地址):

<镜像仓库IP> xxx.xuanyuan.run

保存后再次尝试拉取镜像

✅ 方案 3:修复 Docker Desktop / WSL 网络(Windows 常见问题)

如果您在 Windows 下运行 Docker(特别是 WSL2 模式),DNS 默认走虚拟网卡(172.27.x.x),容易出错。

步骤 1:检查 WSL 的 DNS 配置

cat /etc/resolv.conf

如果看到类似 nameserver 172.27.32.1,说明是 WSL 的内部 DNS。

步骤 2:手动修改 DNS 为公共 DNS

sudo bash -c "echo 'nameserver 223.5.5.5' > /etc/resolv.conf"

步骤 3:禁止 WSL 自动重置 resolv.conf

编辑 /etc/wsl.conf

sudo nano /etc/wsl.conf

添加以下内容:

[network] generateResolvConf = false

步骤 4:重新启动 WSL(在 PowerShell 中执行)

wsl --shutdown

✅ 方案 4:检查网络连通性

使用以下检查点验证网络状态:

nslookup xxx.xuanyuan.run 能解析域名
curl https://xxx.xuanyuan.run/v2/ 能连上
Docker 配置了公共 DNS(223.5.5.5114.114.114.114
⚠️若仍超时,检查宿主机防火墙、代理设置

总结:

  • ✅ DNS 解析超时通常是 Docker 使用的 DNS 服务器无法访问外网导致
  • ✅ 最直接的解决方法是在 /etc/docker/daemon.json 中配置公共 DNS(223.5.5.5、114.114.114.114)
  • ✅ Windows WSL 用户需要特别注意修改 /etc/resolv.conf 并禁止自动重置
  • ✅ 确保网络畅通、防火墙未阻断 DNS 请求(UDP 53 端口)

本文由「xuanyuan.cloud」维护
专注国内 Docker / 镜像 / Registry 网络问题
内容基于真实用户环境与实测

免费获取在线技术支持请 提交工单,官方QQ群:13763429 。
轩辕镜像面向开发者与科研用户,提供开源镜像的搜索和访问支持。所有镜像均来源于原始仓库,本站不存储、不修改、不传播任何镜像内容。
官方邮箱:点击复制邮箱
©2024-2026 源码跳动