如何从 Docker 图像中获取不可变标识符(摘要)列表?
How to get a list of immutable identifier (digest) from a Docker image?
我在 dockerhub 中有一个 Docker image,它已经构建了好几次,因为我需要将 PHP 版本更新到最新版本。我需要使用该图像的先前版本,我认为要走的路是使用不可变标识符又名摘要。
Here 是关于如何通过摘要提取给定图像的文档,但我找不到从该图像中获取所有摘要的方法。
如果您双击给定的构建,您将获得某些信息,例如构建代码,例如:berpxpunhmqe7bqh6lce5ub
但我不认为这是这样的摘要。
如何找到给定构建的摘要?
假设您有一个 tag/identifier 以前的版本 and/or 在您的本地图像缓存中有一个版本,找到要与 pull by digest[=52= 一起使用的摘要] 可以用 docker image inspect
完成,如下所示:
$ docker image inspect --format "{{.RepoDigests}}" alpine:3.6
[alpine@sha256:b40e202395eaec699f2d0c5e01e6d6cb8e6b57d77c0e0221600cf0b5940cf3ab]
在这个例子中,我正在查看 alpine 图像的 3.6 标签,响应是一个我可以使用的字符串使用 docker pull
:
这样的命令
$ docker pull alpine@sha256:b40e202395eaec699f2d0c5e01e6d6cb8e6b57d77c0e0221600cf0b5940cf3ab
sha256:b40e202395eaec699f2d0c5e01e6d6cb8e6b57d77c0e0221600cf0b5940cf3ab: Pulling from library/alpine
Digest: sha256:b40e202395eaec699f2d0c5e01e6d6cb8e6b57d77c0e0221600cf0b5940cf3ab
Status: Image is up to date for alpine@sha256:b40e202395eaec699f2d0c5e01e6d6cb8e6b57d77c0e0221600cf0b5940cf3ab
您的特定图像的潜在问题是 latest
标签似乎已用于您的所有构建,因此除非您有旧图像的本地缓存,否则可能很难查找较旧的 sha256 对先前版本的摘要引用。
如果未通过 docker system prune
或其他清理实用程序删除本地缓存信息,则有几种可能的方法可以找到先前图像的摘要:
docker images -a | grep <image name>
可用于显示所有图像,包括未标记的图像。下面的示例显示了更新后的 ubuntu:latest,我仍然可以访问旧图像。使用该 ID(不是摘要),我可以使用相同的 docker image inspect --format '{{.RepoDigests}}' <image ID>
来检索 ubuntu.
[=57= 的旧 "build" 的实际摘要]
如果我有一个 运行 的容器或使用图像的先前版本退出,我可以通过首先检查容器并找到 图像 ID,然后如上所述检查 图像 ID 并检索旧图像的摘要。在这个有点做作的例子中,我有一个退出的容器,1edd..,我检查它以找到 图像 ID,它恰好仍然有效标记,但使用它的 id 然后我可以使用 image inspect
来获取摘要,即使它不再在我的图像缓存中标记。
示例 1:
$ docker images -a | grep ubuntu
ubuntu latest 747cb2d60bbe 3 weeks ago 122MB`
ubuntu <none> ebcd9d4fca80 5 months ago 118MB
$ docker image inspect --format '{{.RepoDigests}}' ebcd9
[ubuntu@sha256:382452f82a8bbd34443b2c727650af46aced0f94a44463c62a9848133ecb1aa8]
示例 2:
$ docker ps -aq
1edd14b528db
$ docker container inspect 1edd | grep Image
"Image": "sha256:76da55c8019d7a47c347c0dceb7a6591144d232a7dd616242a367b8bed18ecbc",
"Image": "alpine:3.6",
$ docker image inspect --format '{{.RepoDigests}}' 76da55
[alpine@sha256:f006ecbb824d87947d0b51ab8488634bf69fe4094959d935c0c103f4820a417d]
我在 dockerhub 中有一个 Docker image,它已经构建了好几次,因为我需要将 PHP 版本更新到最新版本。我需要使用该图像的先前版本,我认为要走的路是使用不可变标识符又名摘要。
Here 是关于如何通过摘要提取给定图像的文档,但我找不到从该图像中获取所有摘要的方法。
如果您双击给定的构建,您将获得某些信息,例如构建代码,例如:berpxpunhmqe7bqh6lce5ub
但我不认为这是这样的摘要。
如何找到给定构建的摘要?
假设您有一个 tag/identifier 以前的版本 and/or 在您的本地图像缓存中有一个版本,找到要与 pull by digest[=52= 一起使用的摘要] 可以用 docker image inspect
完成,如下所示:
$ docker image inspect --format "{{.RepoDigests}}" alpine:3.6
[alpine@sha256:b40e202395eaec699f2d0c5e01e6d6cb8e6b57d77c0e0221600cf0b5940cf3ab]
在这个例子中,我正在查看 alpine 图像的 3.6 标签,响应是一个我可以使用的字符串使用 docker pull
:
$ docker pull alpine@sha256:b40e202395eaec699f2d0c5e01e6d6cb8e6b57d77c0e0221600cf0b5940cf3ab
sha256:b40e202395eaec699f2d0c5e01e6d6cb8e6b57d77c0e0221600cf0b5940cf3ab: Pulling from library/alpine
Digest: sha256:b40e202395eaec699f2d0c5e01e6d6cb8e6b57d77c0e0221600cf0b5940cf3ab
Status: Image is up to date for alpine@sha256:b40e202395eaec699f2d0c5e01e6d6cb8e6b57d77c0e0221600cf0b5940cf3ab
您的特定图像的潜在问题是 latest
标签似乎已用于您的所有构建,因此除非您有旧图像的本地缓存,否则可能很难查找较旧的 sha256 对先前版本的摘要引用。
如果未通过 docker system prune
或其他清理实用程序删除本地缓存信息,则有几种可能的方法可以找到先前图像的摘要:
[=57= 的旧 "build" 的实际摘要]docker images -a | grep <image name>
可用于显示所有图像,包括未标记的图像。下面的示例显示了更新后的 ubuntu:latest,我仍然可以访问旧图像。使用该 ID(不是摘要),我可以使用相同的docker image inspect --format '{{.RepoDigests}}' <image ID>
来检索 ubuntu.如果我有一个 运行 的容器或使用图像的先前版本退出,我可以通过首先检查容器并找到 图像 ID,然后如上所述检查 图像 ID 并检索旧图像的摘要。在这个有点做作的例子中,我有一个退出的容器,1edd..,我检查它以找到 图像 ID,它恰好仍然有效标记,但使用它的 id 然后我可以使用
image inspect
来获取摘要,即使它不再在我的图像缓存中标记。
示例 1:
$ docker images -a | grep ubuntu
ubuntu latest 747cb2d60bbe 3 weeks ago 122MB`
ubuntu <none> ebcd9d4fca80 5 months ago 118MB
$ docker image inspect --format '{{.RepoDigests}}' ebcd9
[ubuntu@sha256:382452f82a8bbd34443b2c727650af46aced0f94a44463c62a9848133ecb1aa8]
示例 2:
$ docker ps -aq
1edd14b528db
$ docker container inspect 1edd | grep Image
"Image": "sha256:76da55c8019d7a47c347c0dceb7a6591144d232a7dd616242a367b8bed18ecbc",
"Image": "alpine:3.6",
$ docker image inspect --format '{{.RepoDigests}}' 76da55
[alpine@sha256:f006ecbb824d87947d0b51ab8488634bf69fe4094959d935c0c103f4820a417d]