我正在猛烈抨击墙壁,试图找出如何以编程方式获取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没有这样的东西吗?
答案 0 :(得分:4)
我有一段时间面对同样的谜题,答案是:
对于图像操作(包括您询问的标记列表),Microsoft支持docker注册表API v2。
https://docs.docker.com/registry/spec/api
这是什么意思?一个例子:
Azure REST API仅适用于Azure资源操作。在那里你可以使用Bearer Token身份验证,例如发出如下的GET请求:
但正如您所知,这不会让您访问ACR内容的操作。
相反,您需要调用另一个端点,即注册表端点,而且非常重要的是,您需要使用用户名和密码进行基本身份验证:
https://yourregistryname-on.azurecr.io/v2/imagename/tags/list
它是什么用户名和密码?嗯,有两种类型:
答案 1 :(得分:0)
您可以将https://myregistry.azurecr.io/v2/_catalog URL用于基本身份验证。 要获取基本身份验证的用户名和密码,请使用Powershell中的以下命令。
az身份凭证显示--name myregistry