我想使用他们的sha256代码拉出centos,tomcat,...的图像,如
docker pull myimage@sha256:0ecb2ad60
但是我找不到可以在任何地方使用的sha256代码。
我在dockerhub存储库中检查了sha256代码的任何提示,但找不到任何提示。我按标签
下载了图片docker pull tomcat:7-jre8
并使用docker inspect
检查图像以查看元数据中是否有sha256代码,但没有(添加图像的sha256代码可能会更改sha256代码)。
我是否必须自己计算图像的sha256代码并使用它?
答案 0 :(得分:49)
OhJeez在评论中提出的修改。
docker inspect --format='{{index .RepoDigests 0}}' $IMAGE
我相信你也可以使用
docker inspect --format='{{.RepoDigests}}' $IMAGE
仅适用于Docker 1.9,如果图像最初是由摘要提取的。 Details are on the docker issue tracker.
答案 1 :(得分:32)
您可以通过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
答案 2 :(得分:15)
刚看到它:
当我拉图像时,sha256代码显示在输出的底部(Digest:sha ....):
docker pull tomcat:7-jre8
7-jre8: Pulling from library/tomcat
902b87aaaec9: Already exists
9a61b6b1315e: Already exists
...
4dcef5c50d60: Already exists
Digest: sha256:c34ce3c1fcc0c7431e1392cc3abd0dfe2192ffea1898d5250f199d3ac8d8720f
Status: Image is up to date for tomcat:7-jre8
这个沙码
SHA256:c34ce3c1fcc0c7431e1392cc3abd0dfe2192ffea1898d5250f199d3ac8d8720f
可以用
来拉动图像docker pull tomcat @ sha256:c34ce3c1fcc0c7431e1392cc3abd0dfe2192ffea1898d5250f199d3ac8d8720f
通过这种方式,您可以确保图像不会更改,并且可以安全地用于生产。
答案 3 :(得分:3)
这应该是Id字段,您可以在旧deprecated Docker Hub API
中看到GET /v1/repositories/foo/bar/images HTTP/1.1
Host: index.docker.io
Accept: application/json
Parameters:
namespace – the namespace for the repo
repo_name – the name for the repo
响应示例:
HTTP/1.1 200
Vary: Accept
Content-Type: application/json
[{"id": "9e89cc6f0bc3c38722009fe6857087b486531f9a779a0c17e3ed29dae8f12c4f",
"checksum": "b486531f9a779a0c17e3ed29dae8f12c4f9e89cc6f0bc3c38722009fe6857087"},
{"id": "ertwetewtwe38722009fe6857087b486531f9a779a0c1dfddgfgsdgdsgds",
"checksum": "34t23f23fc17e3ed29dae8f12c4f9e89cc6f0bsdfgfsdgdsgdsgerwgew"}]
但是 new docker distribution ,现在 它是如何工作的。
见issue 628: "Get image ID with tag name"
/v1/
注册表响应/repositories/<repo>/tags
用于列出图片ID以及标记句柄/v2/
似乎只能提供处理。将ID与本地找到的ID进行比较会很有用。我可以找到ID的唯一地方是清单的
v1Compat
部分(这对我想要的信息来说太过分了)
目前(2015年中)答案是:
对于图像存储在后端的方式,V1 API的这个属性在计算上非常昂贵。仅枚举标记名称以避免二次查找 此外,V2 API不处理图像ID。相反,它使用摘要来识别图层,这些图层可以作为图层的属性进行计算,并且可以独立验证。
答案 4 :(得分:3)
除了现有答案外,您还可以在执行--digests
时使用docker images
选项,以获取所有图像的摘要列表。
docker images --digests
您可以添加一个grep以进一步细化
docker images --digests | grep tomcat
答案 5 :(得分:1)
最简单,最简洁的方法是:
docker images --no-trunc --quiet $IMAGE
这只会返回sha256:...
字符串,而不会返回其他任何内容。
例如:
$ docker images --no-trunc --quiet debian:stretch-slim
sha256:220611111e8c9bbe242e9dc1367c0fa89eef83f26203ee3f7c3764046e02b248
答案 6 :(得分:1)
您可以在从相应存储库中提取图像时找到它。贝娄命令提到了摘要:在提取docker映像时,sha256。
09:33 AM ##〜::> docker --version 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
图片下载完成后,我们可以执行以下操作
“ ubuntu @ sha256:6e9f67fa63b0323e9a1e587fd71c561ba48a034504fb804fd26fd8800039835d”
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"
答案 7 :(得分:1)
我发现上述方法在某些情况下不起作用。他们要么:
以下方法很精致,但是可以为特定的推送容器提取特定的完整“名称”和哈希。
在这种情况下-图像分别上传到同一仓库中的2个不同项目中,因此查询RepoDigests会返回2个结果。
$ docker inspect --format='{{.RepoDigests}}' gcr.io/alpha/homeapp:latest
[gcr.io/alpha/homeapp@sha256:ce7395d681afeb6afd68e73a8044e4a965ede52cd0799de7f97198cca6ece7ed gcr.io/beta/homeapp@sha256:ce7395d681afeb6afd68e73a8044e4a965ede52cd0799de7f97198cca6ece7ed]
我想使用alpha结果,但是我无法预测它将是哪个索引。因此,我需要操纵文本输出以删除括号,并将每个条目放在单独的行上。从那里我可以轻松地grep结果。
$ docker inspect --format='{{.RepoDigests}}' gcr.io/alpha/homeapp:latest | sed 's:^.\(.*\).$:\1:' | tr " " "\n" | grep alpha
gcr.io/alpha/homeapp@sha256:ce7395d681afeb6afd68e73a8044e4a965ede52cd0799de7f97198cca6ece7ed
答案 8 :(得分:0)
只需再次发出docker pull tomcat:7-jre8
即可获得所需内容。
答案 9 :(得分:0)
如@zelphir所述,使用摘要不是一种好方法,因为对于仅本地图像而言,不存在摘要。我认为图像ID sha在标签/拉动/推动等方面是最准确和一致的。
docker inspect --format='{{index .Id}}' $IMAGE
做到了。