簡體   English   中英

使用Azure容器注冊表從C#創建新的Azure容器實例

[英]Using Azure Container Registry creating new Azure Container Instance from C#

我創建了一個Azure容器注冊表,並將自定義ACI上傳到注冊表 - 沒問題 - 一切都按預期工作。 我嘗試使用Azure門戶從映像創建容器實例,並且沒有問題 - 但是 - 當我想使用Microsoft Azure管理容器實例Fluent API使用C#自動化時,我遇到問題,即使我感覺我已經遍布互聯網和設置,尋找隱藏的障礙物,我一直沒有找到太多的幫助。

我的代碼如下:

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拉圖像docker pull mytestreg.azurecr.io/mytestimage - 沒問題。
  3. 使用WithPublicImageRegistryOnly交換WithPrivateImageRegistry並在WithImage使用debianWithImage工作 - 沒問題。
  4. latest標簽從圖像名稱中刪除 - 仍然不起作用。

我不知道為什么私有注冊表的憑據不起作用 - 我直接從Azure門戶復制/粘貼以避免拼寫錯誤,嘗試手動輸入等。

使用Fiddler檢查流量並未發現任何有趣的內容,除了上述異常消息直接從Azure Management API返回。

我遺失的顯而易見的事情是什么?

在過去幾周我遇到了同樣的問題,我終於找到了解決方案。 您應該在圖像名稱前添加azure注冊服務器名稱。 所以按照你的例子改變:

.WithImage("mytestimage/latest")

至:

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

至少那個為我做了,我希望它可以幫助別人。

上面的答案(即使用完整的azure注冊服務器名稱):

.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 = Azure.Authenticate(authFilePath).WithDefaultSubscription();

至:

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

隨着這種變化,事情現在正在發揮作用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM