在哪里可以找到docker映像的sha256代码?
我想把CentOS,Tomcat。。。使用他们的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代码) 我必须
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,它是本地哈希,而不是 登记处)
$ 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