1. 问题现象与背景分析
最近在部署Container App时遇到一个典型问题:从Container Registries拉取镜像时返回403 Forbidden错误。这个报错表面看是权限问题,但实际排查涉及多个环节的配置校验。根据我的运维经验,这类问题通常发生在以下几种场景:
- 容器注册表凭据未正确配置或已过期
- Container App的托管身份(Managed Identity)未获得ACR拉取权限
- 网络策略阻止了容器注册表的访问
- 容器注册表防火墙规则限制了来源IP
注意:403 Forbidden与401 Unauthorized有本质区别。前者表示认证通过但权限不足,后者则是认证失败。这个细节对排查方向有决定性影响。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 核心排查流程详解
2.1 基础权限校验
首先检查Container App的托管身份是否具备ACRPull权限:
bash复制# 查看已分配的ACR角色
az role assignment list \
--assignee <managed-identity-object-id> \
--scope /subscriptions/<sub-id>/resourceGroups/<rg-name>/providers/Microsoft.ContainerRegistry/registries/<acr-name>
如果没有显示AcrPull角色,需要执行以下命令添加:
bash复制az role assignment create \
--assignee <managed-identity-object-id> \
--role AcrPull \
--scope /subscriptions/<sub-id>/resourceGroups/<rg-name>/providers/Microsoft.ContainerRegistry/registries/<acr-name>
2.2 网络连接测试
即使权限配置正确,网络隔离也可能导致连接失败。建议分步骤测试:
- 从Container App所在节点执行telnet测试:
bash复制
telnet <acr-name>.azurecr
