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

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

我正用头撞墙,试图弄清楚如何以编程方式获取 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 没有类似的东西吗?

最佳答案

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

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

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

  • 您可以在 Azure 门户中的 ACR 上启用的管理员用户
  • 您可以在访问控制下的 ACR 中为用户配置不同类型的访问(更安全)。作为用户名,您可以使用底层 GUID,在 Azure 门户中选择它时在 URL 的查询字符串中可见。密码/ key 也可以在那里配置。
  • 关于c# - Azure 容器注册表 - 列出图像/标签 - 以编程方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49351966/

    相关文章:

    c# - 是否存在 NHibernate 不返回代理对象的情况?

    c# - 自定义 FTP 客户端 PASV 数据连接被拒绝

    asp.net - 网络 API : Basic Authentication or HMAC over SSL?

    azure - 无法在 Azure 容器注册表中查看存储库。

    python - Azure Batch NodePreparationError 尝试从 Azure 容器注册表获取 Docker 镜像

    c# - WebAPI 无法解析 multipart/form-data post

    c# - 尝试删除 NLog.config 结果为 "Cannot modify an evaluated object originating in an imported file"

    c# - 如何在 web api 2 中正确实现异步

    angularjs - 如何在 adal-angular 的 httpinterceptor 发送的承载中添加声明

    azure - 如何将图像从 GHCR 复制到 ACR