6

我创建了一个 Azure 容器注册表,并将自定义 ACI 上传到注册表 - 没问题 - 一切都按预期工作。我尝试使用 Azure 门户从映像创建容器实例,也没有问题 - 但是 - 当我想使用 C# 和 Microsoft Azure Management Container Instance Fluent API 自动执行操作时,我遇到了问题,即使我感觉自己翻遍了互联网和设置,寻找隐藏的障碍,一直没能找到多少帮助。

我的代码如下:

var azureCredentials = new AzureCredentials(new
ServicePrincipalLoginInformation
{
    ClientId = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
    ClientSecret = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
}, "xxxxxxxxxxxxxxxxxxxxxxxxxxxx",
AzureEnvironment.AzureGlobalCloud);

var azure = Azure
    .Configure()
    .Authenticate(azureCredentials)
    .WithSubscription("xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx");

IContainerGroup containerGroup = azure.ContainerGroups.Define("mytestgroup")
    .WithRegion(Region.EuropeWest)
    .WithExistingResourceGroup("mytest-rg")
    .WithLinux()
    .WithPrivateImageRegistry("mytestreg.azurecr.io", "mytestreg", "xxxxxxxxxxxxxx")
    .WithoutVolume()
    .DefineContainerInstance("mytestgroup")
    .WithImage("mytestimage/latest")
    .WithExternalTcpPort(5555)
    .WithCpuCoreCount(.5)
    .WithMemorySizeInGB(.5)
    .Attach()
    .Create();

上面的代码一直给我一个例外:

Microsoft.Rest.Azure.CloudException: 'The image 'mytestimage/latest' in container group 'mytestgroup' is not accessible. Please check the image and registry credential.'

我尝试了几件事;

  1. 测试凭据docker login- 没问题。
  2. 拉图像docker pull mytestreg.azurecr.io/mytestimage- 没问题。
  3. 交换WithPrivateImageRegistryWithPublicImageRegistryOnly仅使用debianin WithImage- 按预期工作 - 没问题。
  4. 将标签留在latest图像名称之外 - 仍然不起作用。

我不知道为什么私有注册表的凭据不起作用 - 我一直在直接从 Azure 门户复制/粘贴以避免拼写错误,尝试手动输入等。

使用 Fiddler 检查流量并没有发现任何有趣的信息,除了上述异常消息是直接从 Azure 管理 API 返回的。

我缺少什么明显的东西?

4

2 回答 2

5

上面的答案(即使用完整的天蓝色注册表服务器名称):

.WithImage("mytestreg.azurecr.io/mytestimage:latest")

似乎是解决方案的一部分,但即使进行了更改,我仍然看到此错误。通过网络上的其他示例(https://github.com/Azure-Samples/aci-dotnet-create-container-groups-using-private-registry/blob/master/Program.cs)包含我需要的内容,我更改了我的天蓝色身份验证:

azure = Azure.Authenticate(authFilePath).WithDefaultSubscription();

至:

AzureCredentials credentials = SdkContext.AzureCredentialsFactory.FromFile(authFilePath);
azure = Azure
    .Configure()
    .WithLogLevel(HttpLoggingDelegatingHandler.Level.Basic)
    .Authenticate(credentials)
    .WithDefaultSubscription();

随着这种变化,现在一切正常。

于 2018-09-13T19:16:09.993 回答
5

过去几周我遇到了同样的问题,我终于找到了解决方案。您应该在映像名称前面添加您的天蓝色注册表服务器名称。因此,按照您的示例更改:

.WithImage("mytestimage/latest")

至:

.WithImage("mytestreg.azurecr.io/mytestimage:latest")

至少这对我有用,我希望它可以帮助别人。

于 2018-07-15T10:34:23.517 回答