Windows环境下az acr login超时但ACR健康检查正常的排查方法
检查Docker代理配置差异
az acr login实际是调用Docker daemon完成登录,而az acr check-health由Azure CLI直接发起请求,两者代理配置可能不一致。打开Docker Desktop的Resources > Proxies,确认代理设置是否正确;若系统设置过HTTP_PROXY/HTTPS_PROXY环境变量,检查Docker是否继承了这些变量,或存在冲突。可临时关闭代理后重新执行az acr login -n <你的ACR名称>测试。验证Docker daemon的网络连通性
直接用Docker命令测试ACR连通性,比如执行docker pull acrau*****.azurecr.io/<镜像名>(需为你有权限访问的镜像),观察是否同样超时;也可通过curl -v https://acrau*****.azurecr.io/v2/直接访问ACR端点,对比Docker与curl的返回结果,判断问题出在Docker还是全局网络。排查DNS解析问题
在命令行执行nslookup acrau*****.azurecr.io,查看解析出的IP是否正常。若解析异常,尝试切换至公共DNS(如8.8.8.8),并执行ipconfig /flushdns清空本地DNS缓存后重新测试。检查防火墙/安全软件拦截
本地防火墙或第三方安全软件可能拦截了Docker daemon的出站请求,但放行Azure CLI的请求。临时关闭Windows Defender防火墙及第三方安全软件,重新执行az acr login测试;若成功,需在防火墙中添加允许Docker daemon访问ACR 443端口的出站规则。确认Docker与Azure CLI版本兼容性
过旧的版本可能存在流程兼容性问题。执行az --version和docker --version查看当前版本,更新至最新稳定版后重新测试。手动模拟登录流程
既然az acr check-health能获取令牌,可手动完成登录排查:- 执行
az acr login -n <你的ACR名称> --expose-token获取登录令牌; - 执行
docker login acrau*****.azurecr.io -u 00000000-0000-0000-0000-000000000000 -p <获取到的令牌>。
若手动登录成功,说明az acr login调用Docker的流程存在异常,需重置Docker凭据存储。
- 执行
重置Docker凭据存储
打开Docker Desktop的Settings > Docker Engine,检查credsStore配置(如是否使用wincred),可临时注释该配置并重启Docker后测试;也可在Windows凭据管理器中,删除acrau*****.azurecr.io相关的凭据条目,再重新执行登录命令。
内容的提问来源于stack exchange,提问作者Jack Spektor

