在哪里可以找到docker映像的sha256代码?

在哪里可以找到docker映像的sha256代码?,docker,docker-registry,Docker,Docker Registry,我想把CentOS,Tomcat。。。使用他们的sha256代码,比如 docker拉力myimage@sha256:0ecb2ad60 但是我找不到任何地方都可以使用的sha256代码 我检查了DockerHub存储库,寻找sha256代码的任何提示,但找不到任何提示。我按标签下载了这些图片 docker pull tomcat:7-jre8 并使用docker inspect检查图像,查看元数据中是否有sha256代码,但没有(添加图像的sha256代码可能会更改sha256代码) 我必须

我想把CentOS,Tomcat。。。使用他们的sha256代码,比如

docker拉力myimage@sha256:0ecb2ad60

但是我找不到任何地方都可以使用的sha256代码

我检查了DockerHub存储库,寻找sha256代码的任何提示,但找不到任何提示。我按标签下载了这些图片

docker pull tomcat:7-jre8
并使用docker inspect检查图像,查看元数据中是否有sha256代码,但没有(添加图像的sha256代码可能会更改sha256代码)


我必须自己计算图像的sha256代码并使用它吗?

这应该是Id字段,您可以在旧版本中看到

答复示例:

但是:现在使用

/v1/
注册表响应
/repositories//tags
用于列出图像ID和标记句柄。
/v2/
似乎只是给出了句柄

将ID与本地找到的ID进行比较会很有用。我唯一能找到ID的地方是清单的
vCompat
部分(这对于我想要的信息来说太过分了)

目前(2015年年中)的答案是:

v1api的这个属性在计算上非常昂贵,因为图像存储在后端。仅枚举标记名以避免二次查找。
此外,v2api不处理图像id。相反,它使用摘要来识别层,这些层可以作为层的属性进行计算,并且可以独立验证

刚才看到了:

拉取图像时,sha256代码显示在输出的底部(摘要:sha….):

这是sha代码

sha256:c34ce3c1fcc0c7431e1392cc3abd0dfe2192ffea1898d5250f199d3ac8d8720f

可用于在以后使用

码头工人拉力tomcat@sha256:c34ce3c1fcc0c7431e1392cc3abd0dfe2192ffea1898d5250f199d3ac8d8720f

通过这种方式,您可以确保图像不会更改,并且可以安全地用于生产。

最新答案 在评论中编辑OhJeez建议的内容

docker inspect --format='{{index .RepoDigests 0}}' $IMAGE
原始答案 我相信你也可以使用

docker inspect --format='{{.RepoDigests}}' $IMAGE

仅适用于Docker 1.9,并且图像最初由摘要提取

你可以通过
docker images--digests

REPOSITORY          TAG    DIGEST                                                                    IMAGE ID     CREATED        SIZE
docker/ucp-agent    2.1.0  sha256:a428de44a9059f31a59237a5881c2d2cffa93757d99026156e4ea544577ab7f3   583407a61900 3 weeks ago    22.3 MB

只需再次发出
docker pull tomcat:7-jre8
,您将得到您想要的。

除了现有的答案,您还可以在执行
docker images
时使用
--digests
选项,以获得所有图像的摘要列表

docker images --digests
您可以添加grep以进一步深入

docker images --digests | grep tomcat

正如@zelphir所提到的,使用摘要不是一个好方法,因为它不适用于仅本地的图像。我假设图像ID sha是跨标签/拉/推等的最准确和一致的

docker inspect --format='{{index .Id}}' $IMAGE

做到这一点。

最简单、最简洁的方法是:

docker映像--无trunc--安静$IMAGE
这只返回
sha256:…
字符串,不返回其他内容

e、 g:

编辑:


注意:这仅适用于本地图像。如果需要,您可以
docker先提取$IMAGE

您可以在从相应存储库提取图像时找到它。下面的命令在提取docker映像时提到Digest:sha256

09:33 AM##~::>docker——版本
Docker版本19.03.4,内部版本9013bf5
摘要:sha256:6e9f67fa63b0323e9a1e587fd71c561ba48a034504fb804fd26fd8800039835d

09:28 AM##~::>docker pull ubuntu
Using default tag: latest
latest: Pulling from library/ubuntu
7ddbc47eeb70: Pull complete
c1bbdc448b72: Pull complete
8c3b70e39044: Pull complete
45d437916d57: Pull complete
**Digest: sha256:6e9f67fa63b0323e9a1e587fd71c561ba48a034504fb804fd26fd8800039835d**
Status: Downloaded newer image for ubuntu:latest
docker.io/library/ubuntu:latest

09:36 AM##~::>docker inspect ubuntu | grep -i sha256
        "Id": "sha256:775349758637aff77bf85e2ff0597e86e3e859183ef0baba8b3e8fc8d3cba51c",
            **"ubuntu@sha256:6e9f67fa63b0323e9a1e587fd71c561ba48a034504fb804fd26fd8800039835d"**
            "Image": "sha256:f0caea6f785de71fe8c8b1b276a7094151df6058aa3f22d2902fe6b51f1a7a8f",
            "Image": "sha256:f0caea6f785de71fe8c8b1b276a7094151df6058aa3f22d2902fe6b51f1a7a8f",
                "sha256:cc967c529ced563b7746b663d98248bc571afdb3c012019d7f54d6c092793b8b",
                "sha256:2c6ac8e5063e35e91ab79dfb7330c6154b82f3a7e4724fb1b4475c0a95dfdd33",
                "sha256:6c01b5a53aac53c66f02ea711295c7586061cbe083b110d54dafbeb6cf7636bf",
                "sha256:e0b3afb09dc386786d49d6443bdfb20bc74d77dcf68e152db7e5bb36b1cca638"
下载完图像后,我们可以执行以下操作

”ubuntu@sha256:6e9f67fa63b0323e9a1e587fd71c561ba48a034504fb804fd26fd8800039835d“


我发现上述方法在某些情况下不起作用。他们要么:

  • 不要很好地处理具有相同哈希的多个图像(在.repodgests建议的情况下-当您想要使用特定的注册表路径时)
  • 将映像推送到注册表时工作不正常 (对于.Id,它是本地哈希,而不是 登记处)
下面的方法很微妙,但用于提取特定推式容器的特定完整“名称”和哈希

下面是一个场景-一个图像分别上传到同一个repo中的两个不同项目,因此查询repo摘要将返回两个结果

$ docker inspect --format='{{.RepoDigests}}' gcr.io/alpha/homeapp:latest

[gcr.io/alpha/homeapp@sha256:ce7395d681afeb6afd68e73a8044e4a965ede52cd0799de7f97198cca6ece7ed gcr.io/beta/homeapp@sha256:ce7395d681afeb6afd68e73a8044e4a965ede52cd0799de7f97198cca6ece7ed]
我想使用alpha结果,但我无法预测它将是哪个索引。因此,我需要处理文本输出以删除括号,并将每个条目放在单独的行中。从那里我可以很容易地预测结果

$ docker inspect --format='{{.RepoDigests}}' gcr.io/alpha/homeapp:latest | sed 's:^.\(.*\).$:\1:' | tr " " "\n" | grep alpha

gcr.io/alpha/homeapp@sha256:ce7395d681afeb6afd68e73a8044e4a965ede52cd0799de7f97198cca6ece7ed 

我在dockerhub上创建了一个与此相关的问题-这不是一个真正完整的解决方案,因为它只处理在线图像。如果您想要本地图像的sha256呢?至少对我来说,这也适用于不是通过摘要而是通过标记提取的图像。Docker 18.09.7就是这样。在Windows下,请使用双引号--format=“…”()读完这篇文章后,你可能也想看看下面的文章。要仅获取摘要,还可以使用
docker图像--format'{{.Digest}'
。这在
foreach
语句中非常有用,可以完成一些摘要工作。我在Cloud Deploy中遇到了与GCR映像相同的摘要不一致问题。这正是我所需要的。非常感谢。
09:28 AM##~::>docker pull ubuntu
Using default tag: latest
latest: Pulling from library/ubuntu
7ddbc47eeb70: Pull complete
c1bbdc448b72: Pull complete
8c3b70e39044: Pull complete
45d437916d57: Pull complete
**Digest: sha256:6e9f67fa63b0323e9a1e587fd71c561ba48a034504fb804fd26fd8800039835d**
Status: Downloaded newer image for ubuntu:latest
docker.io/library/ubuntu:latest

09:36 AM##~::>docker inspect ubuntu | grep -i sha256
        "Id": "sha256:775349758637aff77bf85e2ff0597e86e3e859183ef0baba8b3e8fc8d3cba51c",
            **"ubuntu@sha256:6e9f67fa63b0323e9a1e587fd71c561ba48a034504fb804fd26fd8800039835d"**
            "Image": "sha256:f0caea6f785de71fe8c8b1b276a7094151df6058aa3f22d2902fe6b51f1a7a8f",
            "Image": "sha256:f0caea6f785de71fe8c8b1b276a7094151df6058aa3f22d2902fe6b51f1a7a8f",
                "sha256:cc967c529ced563b7746b663d98248bc571afdb3c012019d7f54d6c092793b8b",
                "sha256:2c6ac8e5063e35e91ab79dfb7330c6154b82f3a7e4724fb1b4475c0a95dfdd33",
                "sha256:6c01b5a53aac53c66f02ea711295c7586061cbe083b110d54dafbeb6cf7636bf",
                "sha256:e0b3afb09dc386786d49d6443bdfb20bc74d77dcf68e152db7e5bb36b1cca638"
$ docker inspect --format='{{.RepoDigests}}' gcr.io/alpha/homeapp:latest

[gcr.io/alpha/homeapp@sha256:ce7395d681afeb6afd68e73a8044e4a965ede52cd0799de7f97198cca6ece7ed gcr.io/beta/homeapp@sha256:ce7395d681afeb6afd68e73a8044e4a965ede52cd0799de7f97198cca6ece7ed]
$ docker inspect --format='{{.RepoDigests}}' gcr.io/alpha/homeapp:latest | sed 's:^.\(.*\).$:\1:' | tr " " "\n" | grep alpha

gcr.io/alpha/homeapp@sha256:ce7395d681afeb6afd68e73a8044e4a965ede52cd0799de7f97198cca6ece7ed