我一直在这里关注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与否)?
首先,请记住,摘要可以表示一个manifest
,一个层或它们的组合(我们通常将该组合称为图像).
Manifest
是一个与Docker注册表V2一起引入的新术语.这是从Docker Registry V2幻灯片第 21页〜第23页获取的简短描述:
- [Manifest]描述单个对象中图像的组件
- 可以立即并行地获取图层.
当您使用命令获取摘要时docker images --digests
,此处摘要是图像清单的SHA256哈希,但图像ID是本地图像JSON配置的哈希码(此配置与清单不同).在这种情况下,如果图像没有关联的清单,则该图像的摘要将为"无".
通常,两种情况可能会使图像没有关联的清单:
要生成清单,最简单的方法是将映像推送到V2注册表(V1注册表将无效).Docker客户端将在本地生成清单,然后将图像层推送到注册表.当您将图像拉回时,图像将显示清单.
清单存在后,您的图像摘要不应为"无".
是的,这与图像的创建方式有关。Docker 有时真的很糟糕。
在这种情况下,这可能对您有帮助: