我正用头撞墙,试图弄清楚如何以编程方式获取 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
用户名和密码是什么?好吧,有两种可能的类型:
关于c# - Azure 容器注册表 - 列出图像/标签 - 以编程方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49351966/