Azure-cli 在训练时从 Azure 容器注册表中拉取 Docker 镜像失败

42次阅读
没有评论

问题描述

在使用 Azure-cli 运行 Azure Ml 时,遇到了一个问题。他的训练代码存在于一个自定义的 Docker 镜像中,该镜像已上传到 Azure 容器注册表。在执行以下命令后,他遇到了以下错误:

az ml job create -f test.yaml --resource-group DefaultResourceGroup-EUS2 --workspace-name test-airflow

错误信息如下:

Failed to pull Docker image prateek2001.azurecr.io/test/dataprep:latest. This error may occur because the compute could not authenticate with the Docker registry to pull the image. If using ACR please ensure the ACR has Admin user enabled or a Managed Identity with `AcrPull` access to the ACR is assigned to the compute.If the ACR Admin user's password was changed recently it may be necessary to synchronize the workspace keys.

用户尝试了以下方法,但错误仍然存在:
– 登录 Azure 门户。
– 打开要使用的 Azure 容器注册表。
– 在“访问密钥”部分,检查是否启用了管理员用户。
– 如果未启用,请点击“启用”按钮进行启用。
– 检查是否为计算机分配了具有“AcrPull”访问权限的托管标识。
– 前往运行 Docker 镜像的计算机,检查是否为计算机分配了托管标识。
– 如果未分配托管标识,请按照 Azure 文档中的步骤进行分配。
– 在 Azure 容器注册表上为托管标识分配“AcrPull”角色。

用户仍然无法解决这个问题,不知道为什么会出现这个错误。

解决方案

请注意以下操作注意版本差异及修改前做好备份。

方案1

根据错误信息,这个错误可能是由于计算机无法通过 Docker 注册表进行身份验证以拉取镜像导致的。如果使用的是 Azure 容器注册表,请确保已启用管理员用户或为计算机分配了具有 AcrPull 访问权限的托管标识。如果最近更改了 ACR 管理员用户的密码,则可能需要同步工作区密钥。

以下是解决这个问题的步骤:
1. 登录 Azure 门户。
2. 打开要使用的 Azure 容器注册表。
3. 在“访问密钥”部分,检查是否启用了管理员用户。如果未启用,请点击“启用”按钮进行启用。
4. 检查是否为计算机分配了具有“AcrPull”访问权限的托管标识。如果未分配托管标识,请按照 Azure 文档中的步骤进行分配。
5. 在 Azure 容器注册表上为托管标识分配“AcrPull”角色。

请注意,如果最近更改了 ACR 管理员用户的密码,则可能需要同步工作区密钥。可以按照 Azure 文档中的步骤进行同步。

方案2

如果方案1无法解决问题,可以尝试以下方法:
1. 确保你的计算机可以访问 Azure 容器注册表。可以尝试使用 docker login 命令登录到 Azure 容器注册表,以验证计算机是否可以成功连接。
2. 检查你的 Docker 配置,确保没有任何代理或防火墙阻止了计算机与 Azure 容器注册表之间的通信。
3. 如果你使用的是 Azure Kubernetes Service (AKS) 或其他 Azure 托管服务,确保你的服务配置正确,并且具有正确的访问权限。

如果问题仍然存在,请参考 Azure 文档中的相关章节,或联系 Azure 支持团队寻求进一步的帮助。

结论

在使用 Azure-cli 运行 Azure Ml 时,如果遇到从 Azure 容器注册表中拉取 Docker 镜像失败的问题,可能是由于计算机无法通过 Docker 注册表进行身份验证导致的。你可以尝试启用管理员用户或为计算机分配具有 AcrPull 访问权限的托管标识来解决这个问题。如果问题仍然存在,请参考 Azure 文档或联系 Azure 支持团队寻求进一步的帮助。

正文完