推送Docker镜像至Azure容器注册表时遇403错误求助
问题重现
执行以下命令时出现错误:
sudo docker push prio.azurecr.io/prio-adi-piplines:latest
错误输出:
The push refers to repository [prio.azurecr.io/prio-adi-piplines]
ea8e4df76021: Preparing
48b104cbbb7b: Preparing
ceaf9e1ebef5: Preparing
9b9b7f3d56a0: Preparing
f1b5933fe4b5: Preparing
error parsing HTTP 403 response body: unexpected end of JSON input: ""
此前已完成Maven构建和Docker镜像构建,仅更新了application.properties中的密钥。
解决步骤
确认Docker已登录目标ACR
由于使用sudo执行推送,需确保sudo环境下的Docker已完成登录:# 用Azure CLI登录ACR(需预先安装配置Azure CLI) sudo az acr login --name prio # 或用Docker原生登录,输入ACR的用户名和密码(从Azure门户ACR「访问密钥」获取) sudo docker login prio.azurecr.io注意:普通用户的Docker登录状态与sudo环境不共享,必须在sudo下执行登录操作。
验证ACR权限配置
确认用于登录的账号(Azure AD账号或服务主体)拥有AcrPush角色权限:- 登录Azure门户,找到目标ACR资源
- 进入「访问控制(IAM)」->「角色分配」
- 检查当前账号是否被分配「AcrPush」角色,无则添加对应角色分配
核对镜像标签正确性
执行docker images命令,确认本地存在标签为prio.azurecr.io/prio-adi-piplines:latest的镜像,避免因标签拼写错误导致推送失败。清理过期登录凭证
若之前的登录凭证已过期,先注销再重新登录:sudo docker logout prio.azurecr.io sudo docker login prio.azurecr.io排查网络连通性
检查服务器是否能正常访问ACR端点,执行:curl -I https://prio.azurecr.io若返回403状态码,说明网络连通但权限不足;若返回超时等错误,需排查网络代理、防火墙规则是否允许访问ACR的443端口。
内容的提问来源于stack exchange,提问作者SRP

