Windows10下Docker Desktop拉取镜像无法连接registry-1.docker.io报错
问题说明
- 主机环境:独立物理机,运行Windows 10 企业版1809(OS内部版本17763.1098),安装Docker Desktop 4.9.0 (80466)
- 网络前置条件:主机未配置任何HTTP代理,可正常访问公网
- 执行的启动命令:
docker run -d -p 80:80 docker/getting-started
- 报错信息:
docker: 守护进程返回错误:请求"https://registry-1.docker.io/v2/"失败,无法连接34.237.163.104的443端口。是否需要配置HTTP代理?
可通过docker run --help查看命令帮助。
排查&解决步骤
按优先级从高到低操作,每步操作完重试拉取命令验证:
修正Docker Desktop残留代理配置
Docker Desktop的代理配置和主机系统代理是独立的,哪怕主机没开代理,软件可能残留之前的代理配置导致网络不通。- 右键任务栏Docker图标,选择Settings进入设置页,打开Resources -> Proxies栏目
- 确认选中
No proxy选项,哪怕当前已经选中,也手动点选一次后点击下方Apply & Restart,等待Docker服务重启完成后重试。
*注:4.9.0版本存在代理配置缓存bug,手动重选一次才能清空残留的无效代理参数。
配置公共DNS与国内镜像源
直连Docker Hub官方节点经常因为跨境链路波动、DNS污染导致IP不可达,直接配置国内镜像源可以绕过该问题:- 打开Docker Desktop设置页的Docker Engine栏目,在配置JSON中添加DNS和镜像源配置,参考如下:
{ "builder": { "gc": { "defaultKeepStorage": "20GB", "enabled": true } }, "experimental": false, "dns": ["223.5.5.5", "114.114.114.114"], "registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"] }
点击Apply & Restart等待服务重启,重启完成后再执行拉取命令即可。
检查WSL2/虚拟化网络连通性
如果Docker Desktop使用WSL2作为后端,WSL实例的网络栈独立于主机,可能出现主机能上网但WSL断网的情况:- 打开Windows命令提示符,执行
wsl --shutdown关闭所有运行中的WSL实例 - 重新打开Docker Desktop,等待WSL实例自动启动后重试拉取。
- 如果要验证WSL网络是否正常,可打开Ubuntu/WSL终端执行
curl https://registry-1.docker.io/v2/,返回401 Unauthorized即为网络连通正常。
- 打开Windows命令提示符,执行
排查拦截规则
- 打开Windows Defender防火墙高级设置,检查出站规则中是否存在拦截dockerd、com.docker.backend进程访问443端口的规则,存在则直接禁用该规则。
- 临时退出第三方安全软件、网络管控类工具后重试,这类工具经常会拦截虚拟化进程的网络请求,且不会在系统防火墙中展示规则。
- 可临时关闭防火墙测试1分钟,如果关闭后能正常拉取,单独给Docker相关进程放开所有出站权限即可。
链路故障排查
如果以上操作都无效,打开命令提示符执行tracert 34.237.163.104,查看路由丢包位置:如果在国内运营商节点就出现连续丢包,属于跨境公网链路临时故障,等待10-20分钟后重试即可,配置国内镜像源可直接规避该类问题。
内容的提问来源于stack exchange,提问作者tushar beniwal
相关产品推荐
相关产品推荐

