Azure DevOps Pipeline推送镜像至ACR时遇HTTP 403解析错误求助
a70b11b076fe: Waiting
3ad1014f96c7: Waiting
bca938d9b956: Waiting
5a48accd2033: Waiting
32ee4143301d: Waiting
c73ad13a1488: Waiting
e85f38974196: Waiting
cc7d774b3dd0: Waiting
f584c095e67e: Waiting
8817f26ab4b2: Waiting
ee4d330edba0: Waiting
f29b9619a031: Waiting
d1692555c73c: Waiting
7bd18c139c73: Waiting
f689d32da261: Waiting
error parsing HTTP 403 response body: unexpected end of JSON input: ""
##[error]error parsing HTTP 403 response body: unexpected end of JSON input: ""
##[error]The process '/usr/bin/docker' failed with exit code 1
Finishing: Push image to registry
此前可正常推送镜像至ACR,近期未做任何变更却触发该403错误,已尝试创建带Contributor权限的新服务主体并配置Azure DevOps服务连接,但问题未解决。
排查与解决建议
- 检查ACR的网络访问策略:若ACR配置了私有端点或IP白名单,流水线使用Microsoft托管代理时,需临时将ACR设置为允许所有网络访问测试;若为自托管代理,需将代理IP加入ACR白名单。
- 验证服务主体的权限分配:确认Contributor权限是直接分配到ACR资源本身,而非仅父级资源组,同时检查是否存在拒绝权限策略覆盖了允许权限。
- 测试服务主体有效性:在本地执行命令
az acr login --name <acr-name> --service-principal -u <client-id> -p <client-secret>,验证服务主体能否正常登录ACR,排除凭证错误或过期问题。 - 检查Docker版本兼容性:在流水线中添加步骤输出Docker版本
docker --version,若使用Microsoft托管代理,尝试切换至新版代理(如ubuntu-22.04),避免版本兼容问题。 - 确认ACR状态与配额:在Azure门户查看ACR的存储配额是否已满,资源是否处于正常运行状态。
- 校验镜像标签格式:确保推送的镜像标签符合ACR要求(如
<acr-name>.azurecr.io/<image-name>:<tag>),无非法字符。
内容的提问来源于stack exchange,提问作者Nikhil Garepally

