Windows10下Docker build拉取rocker/r-base镜像DNS解析失败求助
Docker Build在Windows 10 WSL环境下失败的解决方案
在Windows 10启用WSL的Docker Desktop(Docker Engine v20.10.17)中执行docker build构建镜像失败,但该镜像可在Debian 11正常构建,核心报错为无法解析auth.docker.io域名,具体报错信息如下:
docker build -t <image-name> . [+] Building 2.3s (3/3) FINISHED => [internal] load build definition from Dockerfile 0.1s => => transferring dockerfile: 32B 0.0s => [internal] load .dockerignore 0.1s => => transferring context: 2 0.0s => ERROR [internal] load metadata for docker.io/rocker/r-base:4.2.1 2.0s ------ > [internal] load metadata for docker.io/rocker/r-base:4.2.1: ------ failed to solve with frontend dockerfile.v0: failed to create LLB definition: failed to authorize: rpc error: code = Unknown desc = failed to fetch anonymous token: Get "https://auth.docker.io/token?scope=repository%3Arocker%2Fr-base%3Apull&service=registry.docker.io": dial tcp: lookup auth.docker.io: no such host
针对性解决方案
1. 修复WSL内部DNS解析
- 进入WSL终端,编辑DNS配置文件:
sudo nano /etc/resolv.conf - 将默认DNS替换为公共DNS(如Google 8.8.8.8或Cloudflare 1.1.1.1),修改后内容如下:
nameserver 8.8.8.8 - 保存退出后,测试域名解析是否正常:
若能返回正常IP,重新执行nslookup auth.docker.iodocker build。
2. 为Docker Engine配置自定义DNS
- 打开Docker Desktop,进入Settings > Docker Engine
- 在配置JSON中添加
dns字段,示例如下:{ "dns": ["8.8.8.8", "1.1.1.1"] } - 点击Apply & Restart重启Docker服务,再尝试构建镜像。
3. 重置WSL与Windows网络栈
- 以管理员权限打开Windows命令提示符,依次执行:
wsl --shutdown netsh winsock reset netsh int ip reset all netsh winhttp reset proxy ipconfig /flushdns - 重启WSL和Docker Desktop后,重新运行构建命令。
4. 验证WSL版本与Docker集成状态
- 检查WSL版本,确保使用WSL 2:
wsl -l -v - 若为WSL 1,升级至WSL 2(替换
<distro-name>为你的WSL发行版名称,如Ubuntu):wsl --set-version <distro-name> 2 - 确认Docker Desktop的WSL集成已开启:进入Settings > Resources > WSL Integration,确保对应发行版的集成开关处于打开状态。
内容的提问来源于stack exchange,提问作者bathyscapher
相关产品推荐
相关产品推荐

