Azure容器注册表-列出图像/标签-以编程方式

Jas*_*oss 2 c# asp.net-web-api azure-container-registry

我b着脑袋试图找出如何以编程方式在Azure容器注册表中获取图像列表的方法。

一切似乎都归结于Docker.DotNet自己的图像列表的本地实例化,以及通过该本地存储库推/拉到ACR的过程-但是没有任何东西向我展示如何从容器中获取图像列表(及其标签)。 ACR本身。在探究他们其余的API以获得天蓝色时,似乎只有少量的“管理”选项可用(获取ACR列表,获取ACR的属性,但没有什么比这更深入了)。

我可以通过Azure CLI获取图像名称列表,然后获得其图像名称标签- 我希望在C#应用程序中(实际上是在Web-api中)获得可枚举的图像列表。

本质上,我想做的是在docker中远程运行图像列表,并将与ACR中的图像进行比较,以给出“嘿,此图像有更新版本”。

有人这样做吗?有什么作用吗?

这样简单吗(对于Docker):

    var _credentials = new BasicAuthCredentials("MY_REG_USERNAME", "MY_REG_PASSWORD");
    var _config = new DockerClientConfiguration(new Uri("MY_REGISTRY_NAME.azurecr.io"), _credentials);
    DockerClient _client = _config.CreateClient();

    var myList = await _client.Images.ListImagesAsync(
             new Docker.DotNet.Models.ImagesListParameters() { All = true }
     );
Run Code Online (Sandbox Code Playgroud)

还是不可能?

我已经用DeviceClient弄乱了IoT中心并获得了设备孪生列表等信息-ACR上没有这样的东西吗?

小智 5

我有一段时间面对同样的难题,答案是:

对于映像操作(包括您询问的标签列表),Microsoft支持docker Registry API v2。

https://docs.docker.com/registry/spec/api

这是什么意思?一个例子:

Azure REST API仅适用于Azure资源操作。在那里,您可以使用Bearer Token身份验证,例如发出GET请求,如下所示:

https://management.azure.com/subscriptions/SubscriptionGUID/resourceGroups/ContainerRegistry/providers/Microsoft.ContainerRegistry/registries/YourRegistryName?api-version=2017-10-01

但是您已经知道,这将使您无法访问有关ACR内容的操作。

相反,您需要调用另一个端点,即注册表端点,非常重要的是,您需要使用带有用户名和密码的基本身份验证:

https://yourregistryname-on.azurecr.io/v2/imagename/tags/list

什么是用户名和密码?好吧,可能有两种类型:

  1. 您可以在Azure门户中的ACR上启用的管理员用户
  2. 您可以在ACR中的“访问控制”下为用户配置不同类型的访问(更安全)。作为用户名,您可以使用基础的GUID,当在Azure门户中选择该GUID时,该字符串在URL的查询字符串中可见。密码/密钥也可以在那里配置。