【问题标题】:How to get a list of immutable identifier (digest) from a Docker image?如何从 Docker 映像中获取不可变标识符(摘要)列表?
【发布时间】:2017-11-02 01:08:13
【问题描述】:

我在 dockerhub 中有一个 Docker image,它已经构建了好几次,因为我需要将 PHP 版本更新到最新版本。我需要使用该图像的先前版本,我认为要走的路是使用不可变标识符,即摘要。

Here 是有关如何通过摘要提取给定图像的文档,但我找不到从该图像中获取所有摘要的方法。

如果您双击给定的构建,您会获得某些信息,例如构建代码,例如:berpxpunhmqe7bqh6lce5ub,但我不认为这是这样的摘要。

如何找到给定构建的摘要?

【问题讨论】:

    标签: docker digest dockerhub


    【解决方案1】:

    假设您有以前版本的标签/标识符和/或在您的本地图像缓存中有一个版本,则可以通过docker image inspect 找到与 pull by digest 一起使用的摘要如下:

    $ 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 标记已用于您的所有构建,因此除非您有旧图像的本地缓存,否则可能很难找到旧图像em>sha256 对先前版本的摘要引用。

    如果本地缓存信息未通过docker system prune 或其他清理实用程序删除,有几种可能的方法可以找到先前图像的摘要:

    1. docker images -a | grep <image name> 可用于显示所有图像,包括未标记的图像。下面的示例显示了更新后的 ubuntu:latest,我仍然可以访问旧图像。使用该 ID(不是摘要),我可以使用相同的 docker image inspect --format '{{.RepoDigests}}' <image ID> 来检索旧“构建”的 ubuntu 的实际摘要。

    2. 如果我有一个容器正在运行或使用图像的早期版本退出,我可以通过首先检查容器并找到 图像 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]
    

    【讨论】:

    • 这正是我的问题,我每次构建图像​​时都使用相同的标签,这成为一个问题。如果我每次都使用一个版本,我什至不需要搜索摘要,因为标签就足够了,但遗憾的是我没有正确地做到这一点,现在我遇到了这样的问题。让我们等待其他答案,否则我会接受你的。
    • 我添加了一些示例,用于从使用它的容器中查找可能仍位于图像缓存中的摘要,或者简单地列出本地缓存中的所有未标记图像。让我知道这是否有帮助。
    • 这有助于我找到我在工作中使用的当前图像的摘要(我想找到的那个),所以我今天晚些时候将在家里测试,看看该摘要是否有效。谢谢我已经接受你的回答
    猜你喜欢
    • 2023-01-25
    • 1970-01-01
    • 2018-08-24
    • 2021-02-23
    • 1970-01-01
    • 2013-12-23
    • 2018-02-06
    • 1970-01-01
    • 2021-12-02
    相关资源
    最近更新 更多