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

问题描述 投票:-1回答:1

更新

再读了几次文档后,我意识到我一直在找错误的地方。它不在清单中。

如果在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
docker-registry
1个回答
0
投票

答案是摘要的发送方式。就我而言,我必须包括'''接受:application / vnd.docker.distribution.manifest.v2 + json'''在传入的标题Docker-Content-Digest]中获得正确的摘要

第二,我必须在传出摘要中包含“ sha256:”。示例:

© www.soinside.com 2019 - 2024. All rights reserved.