Docker推送镜像至Azure ACR报错“unauthorized: authentication required”求助
Docker推送至Azure容器注册表(ACR)的授权问题排查
我作为Azure容器注册表(ACR)的IAM所有者,在推送Docker镜像时遇到授权错误,具体操作流程及报错如下:
$ az logout $ az login To sign in, use a web browser to open the page https://microsoft.com/devicelogin and enter the code FW....C to authenticate. [ { "cloudName": "AzureCloud", "homeTenantId": "[redacted]", "id": "[redacted]", "isDefault": true, "managedByTenants": [], "name": "Azure subscription 1", "state": "Enabled", "tenantId": "[redacted]", "user": { "name": "[redacted]", "type": "user" } } ] $ az account set -s [subscription id redacted] $ az acr login --name arcticacr Login Succeeded $ docker push ArcticaCR.azurecr.io/sftp01/sftptest:0.02 The push refers to a repository [ArcticaCR.azurecr.io/sftp01/sftptest] b152ea134f5f: Preparing d799cb5f12bf: Preparing 6b4e8c931236: Preparing 6f4c91ca60bd: Preparing 86eecfa8066e: Preparing unauthorized: authentication required, visit https://aka.ms/acr/authorization for more information.
可能的原因及解决办法
Docker凭证缓存冲突:
az acr login生成的临时凭证可能与之前存储的旧凭证(如ACR管理员密钥、其他租户凭证)冲突,导致Docker使用错误凭证进行推送。- 操作:执行
docker logout arcticacr.azurecr.io清理缓存,重新运行az acr login --name arcticacr,再尝试推送。
- 操作:执行
ACR名称大小写不匹配:
az acr login使用的是小写名称arcticacr,但推送命令中使用了混合大小写的ArcticaCR.azurecr.io。ACR登录服务器名称区分大小写,Docker会将不同大小写的服务器视为不同目标,导致凭证不匹配。- 操作:统一使用小写名称,推送命令改为
docker push arcticacr.azurecr.io/sftp01/sftptest:0.02。
- 操作:统一使用小写名称,推送命令改为
IAM权限生效延迟:Azure IAM权限分配后可能存在短暂的生效延迟,即使你是所有者,新权限也可能未及时同步到会话中。
- 操作:等待5-10分钟后重新执行
az logout→az login→az account set流程,刷新会话后再尝试推送。
- 操作:等待5-10分钟后重新执行
Docker配置文件异常:
~/.docker/config.json文件可能存在格式错误或无效凭证条目,导致Docker无法正确读取az acr login生成的临时凭证。- 操作:备份该文件后删除,重新执行
az acr login生成新的配置,再尝试推送。
- 操作:备份该文件后删除,重新执行
内容的提问来源于stack exchange,提问作者Adam Winter
相关产品推荐
相关产品推荐

