为什么我新建的 docker 没有摘要?
Why doesn't my newly-created docker have a digest?
我一直在关注 Docker tutorial here,并在我的本地 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
但是,这些图像中 none 个有摘要:
# 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
我用 Dockerfile 创建的其他测试图像确实有摘要。
为什么有些图像有摘要而有些没有?它与图像的创建方式有关(是否是 Dockerfile)?
是的,这与图像的创建方式有关。 Docker 有时真的很臭。
This 在这种情况下可能对您有所帮助。
首先,请记住摘要可以表示 manifest
、层或它们的组合(我们通常称该组合为图像)。
Manifest
是随 Docker 注册表 V2 引入的新术语。这是从 Docker Registry V2 slides 第 21 页 ~ 第 23 页获取的简短说明:
- [Manifest] describes the components of an image in a single object
- Layers can be fetched immediately, in parallel.
当你用命令docker images --digests
获取摘要时,这里的摘要是image manifest的SHA256 hash,但是image ID是本地image JSON配置的hash code(这个配置是与清单不同)。在这种情况下,如果图像没有关联的清单,则该图像的摘要将为 "none".
通常情况下,有两种情况可能会导致图像没有关联的清单:
- 此映像尚未推送到 V2 注册表或从中提取。
- 此映像已从 V1 注册表中提取。
要生成清单,最简单的方法是将映像推送到 V2 注册表(V1 注册表不起作用)。 Docker 客户端将在本地生成清单,然后将其与镜像层一起推送到注册表。当你拉回镜像时,镜像会有一个manifest。
清单存在后,您的图像摘要不应 "none"。
我也遇到了这个问题(摘要是 none)。
原因是我什么时候可以得到 docker 图片,而图片已列在 docker 图片.
中
此时,我正在使用
检查摘要值
docker images --digest
摘要值为 <none>
。
解析:
将图像推送到您的 docker 存储库中,然后图像将显示摘要值。
我一直在关注 Docker tutorial here,并在我的本地 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
但是,这些图像中 none 个有摘要:
# 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
我用 Dockerfile 创建的其他测试图像确实有摘要。
为什么有些图像有摘要而有些没有?它与图像的创建方式有关(是否是 Dockerfile)?
是的,这与图像的创建方式有关。 Docker 有时真的很臭。
This 在这种情况下可能对您有所帮助。
首先,请记住摘要可以表示 manifest
、层或它们的组合(我们通常称该组合为图像)。
Manifest
是随 Docker 注册表 V2 引入的新术语。这是从 Docker Registry V2 slides 第 21 页 ~ 第 23 页获取的简短说明:
- [Manifest] describes the components of an image in a single object
- Layers can be fetched immediately, in parallel.
当你用命令docker images --digests
获取摘要时,这里的摘要是image manifest的SHA256 hash,但是image ID是本地image JSON配置的hash code(这个配置是与清单不同)。在这种情况下,如果图像没有关联的清单,则该图像的摘要将为 "none".
通常情况下,有两种情况可能会导致图像没有关联的清单:
- 此映像尚未推送到 V2 注册表或从中提取。
- 此映像已从 V1 注册表中提取。
要生成清单,最简单的方法是将映像推送到 V2 注册表(V1 注册表不起作用)。 Docker 客户端将在本地生成清单,然后将其与镜像层一起推送到注册表。当你拉回镜像时,镜像会有一个manifest。
清单存在后,您的图像摘要不应 "none"。
我也遇到了这个问题(摘要是 none)。
原因是我什么时候可以得到 docker 图片,而图片已列在 docker 图片.
中此时,我正在使用
检查摘要值docker images --digest
摘要值为 <none>
。
解析:
将图像推送到您的 docker 存储库中,然后图像将显示摘要值。