【发布时间】:2023-01-25 07:52:32
【问题描述】:
我正在尝试列出加载到 docker 注册表的图像(例如:ubuntu)的层摘要。我基本上是在为 docker registry 寻找 docker manifest inspect --verbose <image-name> 的等价物,它给出了类似的输出:
从托管注册表的服务器,我成功运行以下命令以列出注册表中的图像:
curl -k -X GET -u admin:root https://docker.registry.url/v2/_catalog | python -mjson.tool
我还可以运行以下命令来查看图像的标签:
curl -k -X GET -u admin:root https://docker.registry.url/v2/ubuntu/tags/list | python -mjson.tool
但是当我尝试使用以下命令(如here)列出摘要时:
curl -k -v -s -X GET -u admin:root https://docker.registry.url/v2/ubuntu/manifests/latest -H 'Accept: application/vnd.docker.distribution.manifest.v2+json' | python -mjson.tool
...我收到以下两条消息:
- “未找到 HTTP/1.1 404”
- “错误:”代码“:”MANIFEST_UNKNOWN“
根据以下输出:
* About to connect() to docker.registry.url port 443 (#0)
* Trying <server-ip-address>...
* Connected to docker.registry.urll (<server-ip-address>) port 443 (#0)
* Initializing NSS with certpath: sql:/etc/pki/nssdb
* skipping SSL peer certificate verification
* SSL connection using TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
* Server certificate:
* subject: CN=docker.registry.url
* start date: Oct 22 13:15:18 2021 GMT
* expire date: Oct 21 13:00:19 2031 GMT
* common name: docker.registry.url
* issuer: CN=docker.registry.url
* Server auth using Basic with user 'admin'
> GET /v2/ubuntu/manifests/latest HTTP/1.1
> Authorization: Basic YWRtaW46QWlyc3BhbjEyMw==
> User-Agent: curl/7.29.0
> Host: docker.registry.url
> Accept: application/vnd.docker.distribution.manifest.v2+json
>
< HTTP/1.1 404 Not Found
< Server: nginx/1.21.3
< Date: Tue, 08 Mar 2022 15:00:36 GMT
< Content-Type: application/json; charset=utf-8
< Content-Length: 187
< Connection: keep-alive
< Docker-Distribution-Api-Version: registry/2.0
< X-Content-Type-Options: nosniff
<
{ [data not shown]
* Connection #0 to host docker.registry.url left intact
{
"errors": [
{
"code": "MANIFEST_UNKNOWN",
"detail": {
"Name": "ubuntu",
"Revision": "sha256:9c152418e380c6e6dd7e19567bb6762b67e22b1d0612e4f5074bda6e6040c64a"
},
"message": "manifest unknown"
}
]
}
1- 为什么会出现上述错误?
2- 如何从 docker registry 获取图像的清单列表?
【问题讨论】:
-
标签列表是否显示
latest作为标签名称?清单是单一平台 docker 清单,而不是多平台清单或 OCI 清单吗? -
@BMitch:是的。这是
-
您在错误中得到摘要这一事实让我认为它可能是一个多平台清单,并且注册表中缺少单个平台清单。尝试在您的接受标头列表中包含
application/vnd.docker.distribution.manifest.list.v2+json。 -
您可能还想尝试 regclient、crane 或 skopeo,它们都比 curl 命令容易得多。 regclient 包含一个
-v debug选项,因此您可以看到发生的各种 API 请求。免责声明,我是作者。 -
@BMitch:新标头出现相同的错误
标签: docker hash docker-registry container-image