我在哪里可以找到docker映像的摘要,以便从注册表中删除它



更新

在又看了几次文档后,我意识到我找错了摘要的位置。它不在清单中。

如果你在v2/name/manifests/标签上执行HEAD或GET操作,你会得到一个标题(Docker Content Digest(,其中包含摘要:

Server  nginx
Date    Sat, 02 Nov 2019 19:01:16 GMT
Content-Type    application/vnd.docker.distribution.manifest.v1+prettyjws
Content-Length  2839
Connection  keep-alive
Docker-Content-Digest   sha256:fcb864bea187b2efbf23d1032052461170fcb482e2dd99f9db5f9a8b538e553d
Docker-Distribution-Api-Version registry/2.0

根据注册表的版本(或者可能与此无关(,在发送GET或HEAD时包含特定标头将导致返回不同的摘要。

此标题为:

Accept: application/vnd.docker.distribution.manifest.v2+json

尽管我正在处理的Registry版本是2.0,但包含此标头会导致为Docker-Content-Digest返回不同的值

无论如何,我尝试了两种变体,但每次获得时我仍然无法删除

{
"errors": [
{
"code": "DIGEST_INVALID",
"message": "provided digest did not match uploaded content"
}
]
}

如果有人感兴趣,这里有一个文档链接:

https://docs.docker.com/registry/spec/api/

原件

我有以下清单是为我的图像下载的。我试过这里的每一个字符串来代替摘要,但我没能做到。

有人能指出其中哪一个是Delete命令所需的摘要吗?

我使用的DELETE http请求具有以下公式:

https://my_registry.com/v2/demo/derivedimage/manifests/<whatever the digest is supposed to be here>

这是我每次都会遇到的错误:

{
"errors": [
{
"code": "DIGEST_INVALID",
"message": "provided digest did not match uploaded content"
}
]
}
{
"schemaVersion": 1,
"name": "demo/derivedimage",
"tag": "4c3a6f78fe709a098a0d24a2c43639e7e170bc5981004554a154245662fea132",
"architecture": "amd64",
"fsLayers": [
{
"blobSum": "sha256:a3ed95caeb02ffe68cdd9fd84406680ae93d633cb16422d00e8a7c22955b46d4"
},
{
"blobSum": "sha256:0f8c40e1270f10d085dda8ce12b7c5b17cd808f055df5a7222f54837ca0feae0"
}
],
"history": [
{
"v1Compatibility": "{"architecture":"amd64","config":{"Hostname":"","Domainname":"","User":"","AttachStdin":false,"AttachStdout":false,"AttachStderr":false,"Tty":false,"OpenStdin":false,"StdinOnce":false,"Env":["PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"],"Cmd":["sh"],"ArgsEscaped":true,"Image":"sha256:02cc0eb9e9d093c512e57d613a9c1d89b0b50b551bbed33e3116459e7d15ee7e","Volumes":null,"WorkingDir":"","Entrypoint":null,"OnBuild":null,"Labels":null},"container":"e24c19c10096d9b60b9ac2276cc24ec9a1ab93e8330dff511362b8e983a4e040","container_config":{"Hostname":"e24c19c10096","Domainname":"","User":"","AttachStdin":false,"AttachStdout":false,"AttachStderr":false,"Tty":false,"OpenStdin":false,"StdinOnce":false,"Env":["PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"],"Cmd":["/bin/sh","-c","#(nop) ","CMD [\"sh\"]"],"ArgsEscaped":true,"Image":"sha256:02cc0eb9e9d093c512e57d613a9c1d89b0b50b551bbed33e3116459e7d15ee7e","Volumes":null,"WorkingDir":"","Entrypoint":null,"OnBuild":null,"Labels":{}},"created":"2019-10-30T23:20:37.206592274Z","docker_version":"18.06.1-ce","id":"d624e6ec746cd764114cfd7f4ab1fb0852e670c10df15adb1e75b4f99e4123be","os":"linux","parent":"9f31ac69fd90b9035252a2e1bac45e3d43b7d32316be7e4ac7a737d9d11b092b","throwaway":true}"
},
{
"v1Compatibility": "{"id":"9f31ac69fd90b9035252a2e1bac45e3d43b7d32316be7e4ac7a737d9d11b092b","created":"2019-10-30T23:20:37.083008444Z","container_config":{"Cmd":["/bin/sh -c #(nop) ADD file:1141b81e5149cc37c4346ee17e282cca8c7016a9bcfeb7a54842a87ecf8419d4 in / "]}}"
}
],
"signatures": [
{
"header": {
"jwk": {
"crv": "P-256",
"kid": "3NQM:K5YD:M3XF:EKJD:4S64:3772:BJOT:JIMR:NX4R:2XYS:IDNA:NOKL",
"kty": "EC",
"x": "k6pZfyr-dKYLri5KJCL70UmNLCQnfUh2lAC_nDK9PVw",
"y": "MhrKOUbx1sgsbF0kG9d5bfvkVaxaFWiKlWTwgFyHkbQ"
},
"alg": "ES256"
},
"signature": "0TWLKZlltDA4kQJR4orhg7NenglG2OevQMSaN-RXCwFod7cyO5VFLVEeBDvsFhuAsvsw8mO475g1G9bW_Zh-aA",
"protected": "eyJmb3JtYXRMZW5ndGgiOjIxOTIsImZvcm1hdFRhaWwiOiJDbjAiLCJ0aW1lIjoiMjAxOS0xMS0wMVQwNDowMTowNloifQ"
}
]
}

答案是如何发送摘要。在我的情况下,我必须包括标题:

Accept: application/vnd.docker.distribution.manifest.v2+json

以在传入标头Docker-Content-Digest中获得正确摘要

其次,我必须包括";sha256:";在传出的摘要中。示例:

curl -vk -X DELETE https://my_registry.com/v2/demo/derivedimage/manifests/sha256:679b1c1058c1f2dc59a3ee70eed986a88811c0205c8ceea57cec5f22d2c3fbb1

答案是:

HTTP/1.1 202 Accepted

最新更新