Где я могу найти дайджест для своего образа докера, чтобы я мог удалить его из реестра? - PullRequest
0 голосов
/ 01 ноября 2019

Обновление

Прочитав документацию еще несколько раз, я понял, что искал не то место для дайджеста. Это НЕ в манифесте.

Если вы сделаете 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"
      }
   ]
}

1 Ответ

0 голосов
/ 12 ноября 2019

Ответ - как отправляется дайджест. В моем случае мне пришлось включить '' '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
...