答案是摘要的发送方式。就我而言,我必须包括'''接受:application / vnd.docker.distribution.manifest.v2 + json'''在传入的标题Docker-Content-Digest
]中获得正确的摘要
第二,我必须在传出摘要中包含“ sha256:”。示例:
再读了几次文档后,我意识到我一直在找错误的地方。它不在清单中。
如果在v2 / name / manifests / tag上执行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
即使我要处理的注册表版本是2.0,包含此标头也会导致为Docker-Content-Digest
返回不同的值>
无论如何,我同时尝试了两种变体,但每次获取时仍然无法删除
{ "errors": [ { "code": "DIGEST_INVALID", "message": "provided digest did not match uploaded content" } ] }
这里是文档的链接,以防有人对此文档感兴趣:
https://docs.docker.com/registry/spec/api/
我具有以下清单,该清单是为我的图像下载的。我在这里尝试了每一个字符串来代替Digest,但是我无法做到这一点。
有人可以指出删除命令中的摘要是哪一个?
我正在使用具有以下规定的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" } ] }
更新在再次阅读文档后,我意识到我一直在寻找错误的地方。它不在清单中。如果您对v2 / name / manifests / ...]做HEAD或GET,则>
答案是摘要的发送方式。就我而言,我必须包括'''接受: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
答案是摘要的发送方式。就我而言,我必须包括'''接受:application / vnd.docker.distribution.manifest.v2 + json'''在传入的标题Docker-Content-Digest
]中获得正确的摘要
第二,我必须在传出摘要中包含“ sha256:”。示例: