查看docker公共注册表中是否存在图像的规范方法是什么?

查看docker公共注册表中是否存在图像的规范方法是什么?,docker,dockerhub,docker-registry,Docker,Dockerhub,Docker Registry,我们希望在开始部署之前,自动检查公共注册表(Docker Hub)中是否存在映像。使用v1api,我们只需查询https://index.docker.io/v1/repositories/gliderlabs/alpine/tags/3.2例如 但是现在注册表的官方API是v2,检查公共注册表中是否存在图像的官方方法是什么 v1 $ curl -i https://index.docker.io/v1/repositories/gliderlabs/alpine/tags/latest HTT

我们希望在开始部署之前,自动检查公共注册表(Docker Hub)中是否存在映像。使用v1api,我们只需查询
https://index.docker.io/v1/repositories/gliderlabs/alpine/tags/3.2
例如

但是现在注册表的官方API是v2,检查公共注册表中是否存在图像的官方方法是什么

v1

$ curl -i https://index.docker.io/v1/repositories/gliderlabs/alpine/tags/latest
HTTP/1.1 200 OK
Server: nginx/1.6.2
Date: Tue, 11 Aug 2015 10:02:09 GMT
Content-Type: application/json
Transfer-Encoding: chunked
Vary: Cookie
X-Frame-Options: SAMEORIGIN
Strict-Transport-Security: max-age=31536000

[{"pk": 20307475, "id": "5bd56d81"}, {"pk": 20355979, "id": "511136ea"}]
v2

$ curl -i https://index.docker.io/v2/repositories/gliderlabs/alpine/tags/latest
HTTP/1.1 301 MOVED PERMANENTLY
Server: nginx/1.6.2
Date: Tue, 11 Aug 2015 10:04:20 GMT
Content-Type: text/html; charset=utf-8
Transfer-Encoding: chunked
X-Frame-Options: SAMEORIGIN
Location: https://index.docker.io/v2/repositories/gliderlabs/alpine/tags/latest/
Strict-Transport-Security: max-age=31536000

$ curl -i https://index.docker.io/v2/repositories/gliderlabs/alpine/tags/latest/
HTTP/1.1 301 MOVED PERMANENTLY
Server: nginx/1.6.2
Date: Tue, 11 Aug 2015 10:04:26 GMT
Content-Type: text/html; charset=utf-8
Transfer-Encoding: chunked
X-Frame-Options: SAMEORIGIN
Location: https://registry.hub.docker.com/v2/repositories/gliderlabs/alpine/tags/latest/
Strict-Transport-Security: max-age=31536000

$ curl -i https://registry.hub.docker.com/v2/repositories/gliderlabs/alpine/tags/latest/
HTTP/1.1 200 OK
Server: nginx/1.6.2
Date: Tue, 11 Aug 2015 10:04:34 GMT
Content-Type: application/json
Transfer-Encoding: chunked
Vary: Cookie
X-Frame-Options: SAMEORIGIN
Allow: GET, DELETE, HEAD, OPTIONS
Strict-Transport-Security: max-age=31536000

{"name": "latest", "full_size": 5250074, "id": 130839, "repository": 127805, "creator": 152141, "last_updater": 152141, "image_id": null, "v2": false}

我是否应该坚持使用
v1
url,即使它现在有点不推荐使用,或者使用
v2
url,但没有相关文档?如果我使用
v2
,我应该直接使用
https://registry.hub.docker.com/v2/
或仍然使用
https://index.docker.io/v1/
并遵循重定向?

上游的
download-freeze-image-v2.sh
脚本至少可以作为一个不错的API示例使用()

主键是您需要点击注册表-1.docker.io而不是
index.docker.io
,并且您需要来自
auth.docker.io
()的“令牌”,即使您只是请求对公共存储库的只读访问。一旦您获得该令牌,就可以点击
https://registry-1.docker.io/v2/gliderlabs/alpine/manifests/latest
带有
授权
头,该头将返回图像的JSON清单,或使用404出错

token="$(curl -sSL "https://auth.docker.io/token?service=registry.docker.io&scope=repository:$image:pull" | jq --raw-output .token)"

curl -fsSL -H "Authorization: Bearer $token" "https://registry-1.docker.io/v2/$image/manifests/$digest"

可能重复:这不是一个重复,链接的问题是关于您可以自己运行的私有注册表,这个问题是关于公共注册表,即dockerhub。v2 api的规格在。这是分发项目的一部分,它允许您运行私有注册表。@Kasisnu是的,我知道,但是没有官方的词来表示公共注册表。我想为这个问题添加一些细节。@jtblin你有没有想过解决这个问题的办法?