从第三方回购中检索Docker映像标签

时间:2019-05-09 00:51:40

标签: docker docker-registry docker-api

对于直接来自Docker Hub的Docker映像,我可以通过点击其存储库API来检索映像的当前标签列表。例如,https://registry.hub.docker.com/v1/repositories/python/tags会给我列出可以与docker pull python:<tag>一起使用的标签。

对于Elastic Search,我使用的是他们的官方存储库,并且可以使用docker pull docker.elastic.co/elasticsearch/elasticsearch:6.4.0

之类的方式提取图像

但是,我不知道如何从该存储库中提取标签列表。我已经尝试过

https://docker.elastic.co/elasticsearch/elasticsearch/tags
https://docker.elastic.co/v1/repositories/elasticsearch
https://docker.elastic.co/v2/repositories/elasticsearch/elasticsearch/_manifests/tags

..以及其他几种变体。 docker命令行工具将哪些存储库/映像名称转换为后端请求上的URL / API端点?

2 个答案:

答案 0 :(得分:1)

事实证明,@PostMapping("upload") public String register(@RequestBody MyObj myObj) {//dostuff} 正在运行V2 docker注册表,因此它需要V2 API命令和令牌身份验证。最初尝试获取标签会导致401,其中包含有关如何获取令牌的信息:

docker.elastic.co

使用http https://docker.elastic.co/v2/elasticsearch/elasticsearch/tags/list (566ms) HTTP/1.1 401 Unauthorized Connection: keep-alive Content-Length: 170 Content-Type: application/json; charset=utf-8 Date: Thu, 09 May 2019 15:24:42 GMT Docker-Distribution-Api-Version: registry/2.0 Www-Authenticate: Bearer realm="https://docker-auth.elastic.co/auth",service="token-service",scope="repository:elasticsearch/elasticsearch:pull" X-Content-Type-Options: nosniff { "errors": [ { "code": "UNAUTHORIZED", "detail": [ { "Action": "pull", "Class": "", "Name": "elasticsearch/elasticsearch", "Type": "repository" } ], "message": "authentication required" } ] } 中的信息为给定的WWW-Authenticateservice请求令牌:

scope

最后,使用令牌发出请求:

http "https://docker-auth.elastic.co/auth?service=token-service&scope=repository:elasticsearch/elasticsearch:pull"                                                                            (567ms)  
HTTP/1.1 200 OK
Connection: keep-alive
Content-Length: 790
Content-Type: application/json
Date: Thu, 09 May 2019 15:25:37 GMT

{
    "token": "some-long-token"
}

答案 1 :(得分:-1)

您可以尝试使用与python相同的方法来获取可用的标签/版本列表。

示例:https://registry.hub.docker.com/v1/repositories/elasticsearch/tags

样本输出:[{"layer": "", "name": "1"}, {"layer": "", "name": "1-alpine"}]

因此,您要尝试执行的操作是,将在shell脚本中提供标签的供应/显示列表,并要求它们选择opt。然后基于此,您将执行docker pull并在自定义Docker FIle中运行这些命令吗?