Can';使用Az CLI创建新Azure容器实例时,请不要从专用Azure容器注册表中提取映像

Can';使用Az CLI创建新Azure容器实例时,请不要从专用Azure容器注册表中提取映像,azure,azure-cli,azure-container-instances,azure-container-registry,Azure,Azure Cli,Azure Container Instances,Azure Container Registry,我已经创建了一个服务主体,可以从我的私有Azure容器注册表进行推拉访问。使用以下命令,推送到ACR的操作非常正常: az login --service-principal -u "someSpID" -p "someSpSecret" --tenant "someTenantID" az acr login --name "someRegistry" docker push "someRegistry.azurecr.io/my-image:0.0.1" docker pull "som

我已经创建了一个服务主体,可以从我的私有Azure容器注册表进行推拉访问。使用以下命令,推送到ACR的操作非常正常:

az login --service-principal -u "someSpID" -p "someSpSecret"  --tenant "someTenantID"
az acr login --name "someRegistry"
docker push "someRegistry.azurecr.io/my-image:0.0.1"
docker pull "someRegistry.azurecr.io/my-image:0.0.1"
我还可以通过以下命令直接拉取图像:

az login --service-principal -u "someSpID" -p "someSpSecret"  --tenant "someTenantID"
az acr login --name "someRegistry"
docker push "someRegistry.azurecr.io/my-image:0.0.1"
docker pull "someRegistry.azurecr.io/my-image:0.0.1"
我想将一个容器实例部署到一个私有子网中,并且我已经配置了网络安全性以允许访问我所说的子网

但是,当我尝试使用以下命令将容器实例部署到我的私有子网中时,我在其中指定了与我以前登录时使用的相同的服务主体,我得到了一个错误响应

az container create \
  --name myContainerGroup \
  --resource-group myResourceGroup \
  --image "someRegistry.azurecr.io/my-image:0.0.1" \
  --os-type Linux \
  --protocol TCP \
  --registry-login-server someRegistry.azurecr.io \
  --registry-password someSpSecret \
  --registry-username someSpID \
  --vnet someVNET \
  --subnet someSubnet \
  --location someLocation \
  --ip-address Private
错误:

urllib3.connectionpool : Starting new HTTPS connection (1): management.azure.com:443
urllib3.connectionpool : https://management.azure.com:443 "PUT /subscriptions/mySubscription/resourceGroups/myResourceGroup/providers/Microsoft.ContainerInstance/containerGroups/myContainerGroup?api-version=2018-10-01 HTTP/1.1" 400
msrest.http_logger : Response status: 400

The image 'someRegistry.azurecr.io/my-image:0.0.1' in container group 'myContainerGroup' is not accessible. Please check the image and registry credential.
当我尝试通过Azure Portal部署容器实例时,也会出现相同的错误


当我尝试将公共映像部署到同一子网时,它成功了,因此这不是部署权限问题,也似乎不是错误的服务主体凭据,因为
docker pull“someRegistry.azurecr.io/my image:0.0.1”
工作正常。我不能完全理解这种前后矛盾的行为。有人有什么想法吗?

对于你的问题,这里有一个可能的原因来解释你的错误。让我们看一下以下限制:

只能使用Azure Kubernetes服务群集或Azure虚拟机 用作主机以访问虚拟网络中的容器注册表。 其他Azure服务(包括Azure容器实例)不支持 目前支持

此限制显示Azure容器注册表的防火墙当前不支持Azure容器实例。它只支持在Azure VM或AKS集群中拉/推映像


因此,您的解决方案是更改规则以允许所有网络连接,然后重试。或者使用AKS群集,但成本也会更高。

对于您的问题,这里有一个可能的原因来解释您遇到的错误。让我们看一下以下限制:

只能使用Azure Kubernetes服务群集或Azure虚拟机 用作主机以访问虚拟网络中的容器注册表。 其他Azure服务(包括Azure容器实例)不支持 目前支持

此限制显示Azure容器注册表的防火墙当前不支持Azure容器实例。它只支持在Azure VM或AKS集群中拉/推映像


因此,您的解决方案是更改规则以允许所有网络连接,然后重试。或者使用AKS群集,但成本也会更高。

这看起来不错,可能是凭证输入错误或sp错误,或者您没有访问Pulls的权限。您是否检查服务负责人是否具有正确的权限和图像标记?我是。@CharlesXu是的,我有。SP有权拉/推和部署。我通过手动登录docker注册表并拉/推来测试这一点。因此,一个新的更新是,当我将
允许从
所选网络访问
更改为
所有网络
,并添加
az acr登录名--“someRegistry”--用户名“someSpID”--密码时“someSpSecret
它可以工作。但是,我们希望将其部署到专用VNET中。在此配置更改之前,已将VNET添加到所选网络列表中。所以我想知道这是否与容器实例网络配置文件有关图像和标记是什么?这和你使用的一样吗?是的,图像和标签都一样。这看起来很好,可能是凭证输入错误或sp错误,或者你没有访问Pulls的权限。你检查服务负责人是否有正确的权限,图像标签是否正确吗?@CharlesXu是的,我有。SP有权拉/推和部署。我通过手动登录docker注册表并拉/推来测试这一点。因此,一个新的更新是,当我将
允许从
所选网络访问
更改为
所有网络
,并添加
az acr登录名--“someRegistry”--用户名“someSpID”--密码时“someSpSecret
它可以工作。但是,我们希望将其部署到专用VNET中。在此配置更改之前,已将VNET添加到所选网络列表中。所以我想知道这是否与容器实例网络配置文件有关图像和标记是什么?这些都和你使用的一样吗?是的,图像和标签都一样。奇怪的是,我实际上是在游乐场环境中工作的(有类似的设置),因此我忽略了他们文档中指定的限制。这个问题只有在我试图在新环境中模拟相同的设置时才会出现。我想我会与微软联系,了解这种差异背后的细微差别。谢谢,尽管你是一只很棒的橡皮鸭:)在我从微软得到消息后会更新。@theknees好吧,我也想知道区别。如果有帮助的话,你可以在确认后接受它。奇怪的是,我实际上是在游乐场环境中工作的(有类似的设置),因此我忽略了他们文档中指定的限制。这个问题只有在我试图在新环境中模拟相同的设置时才会出现。我想我会与微软联系,了解这种差异背后的细微差别。谢谢,尽管你是一只很棒的橡皮鸭:)在我从微软得到消息后会更新。@theknees好吧,我也想知道区别。如果有帮助,你可以在确认后接受。