对于直接来自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端点?
答案 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-Authenticate
和service
请求令牌:
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中运行这些命令吗?