为什么我新建的码头工人没有摘要?

Ada*_*tan 7 digest docker

我一直在这里关注Docker教程,并通过对现有图像进行更改并使用三个不同标签对其进行标记,在我的本地OSX计算机上构建测试图像:

# docker images
REPOSITORY               TAG                 IMAGE ID            CREATED             SIZE
adamatan/sinatra         devel               fccb6b4d21b4        8 minutes ago       469.5 MB
adamatan/sinatra         junk                fccb6b4d21b4        8 minutes ago       469.5 MB
adamatan/sinatra         latest              fccb6b4d21b4        8 minutes ago       469.5 MB
Run Code Online (Sandbox Code Playgroud)

但是,这些图像都没有摘要:

# docker images --digests adamatan/sinatra
REPOSITORY          TAG                 DIGEST              IMAGE ID            CREATED             SIZE
adamatan/sinatra    devel               <none>              fccb6b4d21b4        9 minutes ago       469.5 MB
adamatan/sinatra    junk                <none>              fccb6b4d21b4        9 minutes ago       469.5 MB
adamatan/sinatra    latest              <none>              fccb6b4d21b4        9 minutes ago       469.5 MB
Run Code Online (Sandbox Code Playgroud)

我用Dockerfile创建的其他测试图像确实有摘要.

为什么有些图片有摘要而有些没有?它与图像的创建方式有关(Dockerfile与否)?

Hao*_*ang 9

首先,请记住,摘要可以表示一个manifest,一个层或它们的组合(我们通常将该组合称为图像).

Manifest是一个与Docker注册表V2一起引入的新术语.这是从Docker Registry V2幻灯片第 21页〜第23页获取的简短描述:

  • [Manifest]描述单个对象中图像的组件
    • 可以立即并行地获取图层.

当您使用命令获取摘要时docker images --digests,此处摘要是图像清单的SHA256哈希,但图像ID是本地图像JSON配置的哈希码(此配置与清单不同).在这种情况下,如果图像没有关联的清单,则该图像的摘要将为"无".

通常,两种情况可能会使图像没有关联的清单:

  1. 此图像尚未推送到V2注册表或从V2注册表中提取.
  2. 此图像已从V1注册表中提取.

要生成清单,最简单的方法是将映像推送到V2注册表(V1注册表将无效).Docker客户端将在本地生成清单,然后将图像层推送到注册表.当您将图像拉回时,图像将显示清单.

清单存在后,您的图像摘要不应为"无".

  • 有一个新的“实验性”“docker manifest”命令 - 但它仍然不能完全满足用户真正想要的功能,即。在本地为缺少的图像生成清单。 (2认同)

Col*_*lin 6

是的,这与图像的创建方式有关。Docker 有时真的很糟糕。

在这种情况下,这可能对您有帮助:

  • 这太疯狂了 - `docker inform &lt;image&gt;` 将打印摘要,即使 `docker images --digests` 打印 `&lt;none&gt;`。 (4认同)
  • FWIW,与上面的@EdRandall 相比,如果“docker images ---digest”显示“&lt;none&gt;”,我**不会**发现“docker inform”有摘要。当然,我是在 2022 年写这篇文章的,Docker 引擎版本为 20.10.17。事情可能会改变,但我为后来的读者澄清了这一点。更具体地说,我发现当没有摘要时,“inspect”显示数组“RepoDigests”为空,否则有一个值。 (4认同)
  • @EdRandall 谢谢你。我对一个不相关的 skaffold 问题感到疯狂,这很有帮助。 (2认同)