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

时间:2018-03-18 19:24:14

标签: c# asp.net-web-api azure-container-registry

我正在猛烈抨击墙壁,试图找出如何以编程方式获取Azure容器注册表中的图像列表。

一切似乎都在于查看Docker.DotNet自己的本地图像列表实例化,并通过该本地存储库推送/拉到ACR - 但没有任何东西告诉我如何获取来自ACR本身的图像列表(及其标签)。在挖掘其余的API for azure时,看起来只有一小组“管理”选项可用(获取ACR列表,获得ACR的属性,但没有任何显示我潜水深度超过这个)。 p>

我可以通过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 }
     );

还是不可能?

我已经搞乱了IoT集线器,并使用DeviceClient获取设备双列表等等 - ACR没有这样的东西吗?

2 个答案:

答案 0 :(得分:4)

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

对于图像操作(包括您询问的标记列表),Microsoft支持docker注册表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. 您可以使用不同类型的访问权限(更安全)在Access Control下的ACR中配置用户。作为用户名,您可以使用基础GUID,在Azure门户中选择它时,URL中的查询字符串中可见。密码/密钥也可以在那里配置。

答案 1 :(得分:0)

您可以将https://myregistry.azurecr.io/v2/_catalog URL用于基本身份验证。 要获取基本身份验证的用户名和密码,请使用Powershell中的以下命令。

az身份凭证显示--name myregistry