7

我把头撞在墙上,试图弄清楚如何以编程方式获取 Azure 容器注册表中的图像列表。

一切似乎都归结为查看 Docker.DotNet 自己的图像列表本地实例化,并通过该本地存储库推/拉到 ACR - 但没有任何东西告诉我如何从ACR 本身。在挖掘 azure 的其余 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 }
     );

还是不可能?

我已经搞砸了 IoT 集线器并使用 DeviceClient 获取设备孪生列表等——ACR 没有这样的东西吗?

4

2 回答 2

8

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

对于图像操作(包括您询问的标签列表),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 内容的操作。

相反,您需要调用不同的端点,即 Registry 端点,并且非常重要的是,您需要使用带有用户名和密码的基本身份验证:

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

它的用户名和密码是什么?嗯,有两种可能:

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

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

az acr 凭据显示 --name myregistry

于 2020-01-12T02:45:31.757 回答