Docker Desktop可正常登录但命令行执行docker login报连接超时错误
可行解决思路
- 先排查WSL2网络连通性
你当前使用WSL2作为Docker后端,Docker Desktop客户端走Windows网络栈,而命令行调用的Docker daemon跑在WSL2内核中,二者网络栈独立。首先打开WSL2终端执行命令:curl -v https://registry-1.docker.io/v2/
如果请求超时,说明是WSL2本身的网络问题,优先排查该方向。 - 手动修正WSL2 DNS配置
如果你之前修改的是Windows系统DNS,WSL2默认自动同步Windows DNS时经常出现解析异常,按如下步骤手动配置:- 打开WSL2终端,编辑
/etc/wsl.conf,添加以下内容:
[network] generateResolvConf = false- 执行
wsl --shutdown关闭WSL后重新打开,编辑/etc/resolv.conf,删除原有内容后添加:
配置完成后再次尝试nameserver 114.114.114.114 nameserver 8.8.8.8docker login。 - 打开WSL2终端,编辑
- 配置Docker国内镜像加速源
打开Docker Desktop设置,找到「Docker Engine」配置项,在JSON配置中添加registry-mirrors字段,配置国内公共加速源,示例配置:
保存后重启Docker Desktop再测试登录。{ "registry-mirrors": [ "https://registry.docker-cn.com", "https://mirror.baidubce.com" ] } - 排查防火墙/安全软件拦截
暂时关闭Windows系统防火墙以及第三方安全防护软件,再尝试执行docker login,如果恢复正常,将WSL2相关进程、Docker Desktop进程添加到防火墙白名单即可。 - 校验Docker上下文配置
执行docker context ls查看当前激活的上下文,若默认上下文未指向Docker Desktop的WSL2后端,执行docker context use desktop-windows切换到正确上下文后重试。 - 排查hosts解析污染
分别检查Windows系统C:\Windows\System32\drivers\etc\hosts文件,以及WSL2内/etc/hosts文件,删除所有和registry-1.docker.io、index.docker.io相关的强制解析记录后重试。
内容的提问来源于stack exchange,提问作者Gagan
相关产品推荐
相关产品推荐

