Azure Container Registry authorization for Azure Web App



有没有办法从 Azure 包含程序注册表中提取映像,而无需使用以下应用设置?

DOCKER_REGISTRY_SERVER_URL DOCKER_REGISTRY_SERVER_PASSWORD

我尝试为我的应用服务提供适当的 RBAC,并使用容器上的 Azure Web 应用部署 DevOps 任务,但这不起作用。

目前,我使用管理员用户/密码将其设置为CD,但这不是我想投入生产的选项。

我收到的错误消息(当我没有设置DOCKER_REGISTRY_SERVER_URL和DOCKER_REGISTRY_SERVER_PASSWORD时(:

2020-06-18T11:01:51.313Z 信息 - 从 Docker 中心拉取映像:xx.azurecr.io/xx:xx

2020-06-18T11:01:51.545Z 错误 - DockerApi异常:Docker API 响应状态代码=内部服务器错误,响应={"消息":"获取 https://xx.azurecr.io/v2/xx/manifests/xx:未经授权:需要身份验证"}

2020-06-18T11:01:51.553Z 错误 - 映像拉取失败:验证 docker 映像配置和凭据(如果使用私有存储库(

应用设置中的环境变量:

DOCKER_REGISTRY_SERVER_URL DOCKER_REGISTRY_SERVER_PASSWORD

是需要从 Azure 容器注册表拉取映像时的必要条件。需要知道应用设置中 ACR 的凭据与 Web 应用的托管标识之间的正确顺序。

Web应用的托管标识用于在 Web 应用运行时访问 Web 应用内的其他资源。请注意,Web 应用程序正在运行。这意味着映像已从 ACR 拉取。因此,你会看到,ACR 的凭据将在托管标识之前使用。如果未设置凭据,则无法拉取映像,以便 Web 应用无法正常运行。此时,托管标识没有意义。

若要使其使用托管标识,需要设置 Web 应用的以下属性:

"siteConfig": {
"acrUseManagedIdentityCreds": true
}

完成此操作后,仍需要DOCKER_REGISTRY_SERVER_URL指向 Azure 容器注册表,但无需提供密码。显然,托管标识需要在注册表上分配 AcrPull 角色。

最新更新