如何从 docker 注册表 REST API 获取镜像清单 schemaVersion 2?

问题描述 投票:0回答:1

我正在尝试使用 python 为 docker 注册表编写一个 Web ui。我主要这样做,所以我可以学到很多关于 docker 的知识,并且我想拥有自己的 Web ui。

我想显示每个图像的未压缩大小。据我所知,应该可以通过获取特定标签的清单来实现。我正在使用来自 docker hub 的官方 docker 注册表以及最新的标签。

如果我制作一个

GET http://docker.lan:5000/v2/my-image/manifests/latest
,我会得到清单,但只有 schemaVersion 1,如果我没看错的话,它已被废弃。

{
   "schemaVersion": 1,
   "name": "my-image",
   "tag": "latest",
   "architecture": "amd64",
   "fsLayers": [
      {
         "blobSum": "sha256:a3ed95caeb02ffe68cdd9fd84506680ae93d633cb16422d00e8a7c22955b46d4"
      },...

如何获取 schemaVersion 2?看来,还有更多细节。我还尝试获取每个斑点并将每个大小添加到一个整数,但这只是压缩的大小,我想显示未压缩的大小。

我尝试将 GET 的标头设置为

{"Content-Type": "application/vnd.docker.distribution.manifest.v2+json"}

{"Content-Type": "application/vnd.docker.distribution.manifest.list.v2+json"}

文档媒体类型所示,但这没有任何作用,或者我用错了......

docker docker-registry
1个回答
0
投票

您缺少

Accept
标题。否则,注册表将回退到架构 v1。 Accept 标头应该是您可以接收的媒体类型列表,并且有 Docker 和 OCI 媒体类型:

客户端应该包含一个 Accept 标头,指示它支持哪些清单内容类型。在成功的响应中,Content-Type 标头将指示返回的清单的类型。 Content-Type 标头应该与客户端推送的清单内容类型相匹配。如果清单具有 mediaType 字段,客户端应该拒绝,除非 mediaType 字段的值与 Content-Type 标头指定的类型匹配。有关使用 Accept 标头和内容协商的更多信息,请参阅内容协商。

https://github.com/opencontainers/distribution-spec/blob/main/spec.md#pull

有关 Accept 标头的更多信息,请参阅 RFC:https://datatracker.ietf.org/doc/html/rfc7231#section-5.3.2

© www.soinside.com 2019 - 2024. All rights reserved.