You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

配置Azure App Service从ACR拉取镜像失败,无部署日志

调试Azure App Service从ACR拉取镜像失败及手动触发部署方法

调试排查步骤

1. 验证身份权限有效性

  • 针对系统托管身份:
    1. 执行命令获取身份ID:
      az webapp identity show --name <你的应用名> --resource-group <资源组名>
      
    2. 验证该身份是否已绑定ACR的AcrPull权限:
      az role assignment list --assignee <上一步获取的principalId> --scope /subscriptions/<订阅ID>/resourceGroups/<资源组名>/providers/Microsoft.ContainerRegistry/registries/<ACR名称>
      
      确认输出中包含AcrPull角色的分配记录,且范围是ACR资源本身。
  • 针对用户托管身份:除了验证角色分配,还要检查App Service的身份设置页,确认已正确关联该用户身份。
  • 针对服务主体:在本地设置环境变量后尝试拉取镜像,验证权限:
    export DOCKER_REGISTRY_SERVER_URL=<ACR名称>.azurecr.io
    export DOCKER_REGISTRY_SERVER_USERNAME=<服务主体应用ID>
    export DOCKER_REGISTRY_SERVER_PASSWORD=<服务主体密钥>
    docker login $DOCKER_REGISTRY_SERVER_URL -u $DOCKER_REGISTRY_SERVER_USERNAME -p $DOCKER_REGISTRY_SERVER_PASSWORD
    docker pull <ACR名称>.azurecr.io/<镜像名>:<标签>
    

2. 获取底层容器日志

  • 进入App Service的诊断和解决问题面板,搜索“容器拉取错误”或“容器启动故障”,查看平台级的Docker拉取日志(这部分日志比部署中心的日志更详细)。
  • 开启容器日志持久化:在配置>常规设置中启用“持久存储”,然后到日志流页面实时查看容器启动过程的输出,包括镜像拉取的具体错误信息。

3. 对比VS Code成功部署的配置差异

导出VS Code部署成功的App Service配置,与手动配置的应用对比:

az webapp config show --name <VS Code部署的应用名> --resource-group <资源组名> > success-config.json
az webapp config show --name <手动配置的应用名> --resource-group <资源组名> > manual-config.json

重点对比以下字段:

  • linuxFxVersion:是否正确格式为DOCKER|<ACR名称>.azurecr.io/<镜像名>:<标签>
  • identity:身份配置的类型、关联的用户身份ID是否一致
  • appSettings:Docker相关环境变量是否存在格式错误或遗漏

手动触发部署的方法

  • Azure CLI触发同步:
    az webapp deployment source sync --name <你的应用名> --resource-group <资源组名>
    
  • 门户重启应用:在App Service概述页面点击“重启”,重启过程中会重新尝试拉取镜像。
  • 更新镜像标签触发部署:修改App Service配置中的linuxFxVersion里的镜像标签(例如从v1改为v1.1),保存后会触发新的部署流程。

额外注意点

  • 确保App Service的定价层为Basic及以上,Free层存在容器拉取的限制。
  • 若使用用户托管身份,权限的作用范围必须是ACR资源本身,而非资源组或订阅。

内容的提问来源于stack exchange,提问作者warghs

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 04:05:32