Обновление
Прочитав документацию еще несколько раз, я понял, что искал не то место для дайджеста. Это НЕ в манифесте.
Если вы сделаете HEAD или GET для тега v2 / name / manifest /, вы получите заголовок (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/
Оригинал
У меня есть следующий манифест, который загружен для моего изображения. Я перепробовал каждую строку здесь, вместо «Дайджеста», но я не смог этого сделать.
Может ли кто-нибудь указать, какой из этих дайджестов мне нужен для команды удаления?
Я использую запрос 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"
}
]
}