[英]Azure Container Instances Python API - fails to fetch image from Azure Container Registry
根据本指南,我编写了适用于默认映像(“microsoft/aci-helloworld”)的示例代码,但在从 Azure 订阅中的 Azure 容器注册表更改为映像时失败。
错误信息是:
The image 'mytest.azurecr.io/myimage:latest' in container group '' is not accessible. Please check the image and registry credential.
我发现了这个类似的 SO 线程,但示例代码已经使用了该问题的解决方案(使用基于文件的身份验证)。
我还尝试了带/不带“:latest”后缀的图像名称,并确保“docker pull mytest.azurecr.io/myimage:latest”成功。
编辑:添加 ACR 屏幕截图:
注意:我也尝试过 C# 代码示例(根据类似的 SO 线程),并收到相同的错误。 我可能遗漏了一些与配置相关的东西。 如何允许服务主体访问 ACR? 我根据指南创建了主体:
az ad sp create-for-rbac --sdk-auth > my.azureauth
这是否意味着此服务主体应该可以访问同一订阅中的任何 ACR?
缺少的部分是添加 ACR 的凭据。 固定代码看起来像这样(您必须在 ImageRegistryCredential 实例中设置服务器、用户名和密码):
credentials = [ImageRegistryCredential(server='myregistry.azurecr.io', username='acr_username', password='acr_password')]
group = ContainerGroup(location=resource_group.location,
containers=[container],
os_type=OperatingSystemTypes.linux,
ip_address=group_ip_address,
image_registry_credentials=credentials)
根据我的经验,你得到的错误是图像名称错误,说明在ACR中找不到该图像。 如屏幕截图所示,图像名称必须是xxxtestaci.azurecr.io/tempxxx:latest
或xxxtestaci.azurecr.io/tempxxx
。 重现错误也很容易:
对于 ACR 的凭据,您可以按照Azure 容器注册表身份验证中的步骤使用服务主体。 但是,如果您在创建资源和从 ACR 中提取映像时仅使用一个服务主体,我建议您授予服务主体Contributor
角色。
这是否意味着此服务主体应该可以访问同一订阅中的任何 ACR?
默认情况下,CLI 命令az ad sp create-for-rbac
使用默认参数--role Contributor
。 所以是的,它可以访问同一订阅中的任何 ACR。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.