Docker下载更新的映像以进行缓存的摘要

问题描述 投票:2回答:1

我的Dockerfile第一步:

FROM python:3.6.10@sha256:6cd232ed00e729b4d4d3aa57c1764dddfab70f616042b7f36536e2c3d70c4c11

此目标是to "lock" or "pin" the version of the image

一段时间后,docker build正确使用了缓存的版本:

Step 1/2 : FROM python:3.6.10@sha256:6cd232ed00e729b4d4d3aa57c1764dddfab70f616042b7f36536e2c3d70c4c11
 ---> 114ae8bdb954

但是过了一段时间,它决定“下载更新的图像”:

Step 1/2 : FROM python:3.6.10@sha256:6cd232ed00e729b4d4d3aa57c1764dddfab70f616042b7f36536e2c3d70c4c11
sha256:6cd232ed00e729b4d4d3aa57c1764dddfab70f616042b7f36536e2c3d70c4c11: Pulling from library/python
7e2b2a5af8f6: Pulling fs layer
09b6f03ffac4: Pulling fs layer
dc3f0c679f0f: Pulling fs layer
fd4b47407fc3: Pulling fs layer
bb7b28578995: Pulling fs layer
6ebea4a9a306: Pulling fs layer
22a2327cd1ca: Pulling fs layer
bfbf91c84bbe: Pulling fs layer
f6b29b259c5c: Pulling fs layer
09b6f03ffac4: Verifying Checksum
09b6f03ffac4: Download complete
dc3f0c679f0f: Download complete
7e2b2a5af8f6: Verifying Checksum
7e2b2a5af8f6: Download complete
6ebea4a9a306: Verifying Checksum
6ebea4a9a306: Download complete
fd4b47407fc3: Verifying Checksum
fd4b47407fc3: Download complete
bfbf91c84bbe: Verifying Checksum
bfbf91c84bbe: Download complete
f6b29b259c5c: Verifying Checksum
f6b29b259c5c: Download complete
22a2327cd1ca: Verifying Checksum
22a2327cd1ca: Download complete
bb7b28578995: Verifying Checksum
bb7b28578995: Download complete
7e2b2a5af8f6: Pull complete
09b6f03ffac4: Pull complete
dc3f0c679f0f: Pull complete
fd4b47407fc3: Pull complete
bb7b28578995: Pull complete
6ebea4a9a306: Pull complete
22a2327cd1ca: Pull complete
bfbf91c84bbe: Pull complete
f6b29b259c5c: Pull complete
Digest: sha256:6cd232ed00e729b4d4d3aa57c1764dddfab70f616042b7f36536e2c3d70c4c11
Status: Downloaded newer image for python@sha256:6cd232ed00e729b4d4d3aa57c1764dddfab70f616042b7f36536e2c3d70c4c11
 ---> 114ae8bdb954

即使此步骤的最终哈希值相同:

 ---> 114ae8bdb954

据我了解,摘要(sha256:...)是不可变的。那么它们到底是可变的吗?还是以某种方式删除了缓存版本?怎么回事,如何解决?

docker dockerfile docker-registry
1个回答
1
投票

有两种摘要:注册表中图像清单的摘要和本地图像的JSON配置摘要,其中还包含图像内容的摘要。

第一摘要:python:3.6.10@sha256:6cd232ed00e729b4d4d3aa57c1764dddfab70f616042b7f36536e2c3d70c4c11是Docker Hub中清单清单的摘要作为参考。

摘要不可更改。

如果两个不同的事物产生相同的摘要值-则哈希函数(在这种情况下使用sha256)将被破坏并且无法再使用。参见collision.

在您的情况下,由于某种原因,它不再找到缓存的图像。它再次下载了同一张图片。

最后的结果摘要(---> 114ae8bdb954是该图像(图像ID)的结果配置的摘要。

您可以确认已下载正确的清单:

docker inspect 114ae8bdb954 

包含:

"RepoDigests": [
            "python@sha256:6cd232ed00e729b4d4d3aa57c1764dddfab70f616042b7f36536e2c3d70c4c11"
        ],

由于两种情况下的图像ID相同,我认为没有任何要修复的内容。但是,如果经常发生,则缓存会出现一些问题。

关于缓存的编辑:如果在docker-in-docker场景中完成-如果在父Docker的构建阶段之前发生了某些变化,它将始终再次重建该映像。

有关图像ID的更多信息:https://windsock.io/explaining-docker-image-ids/

© www.soinside.com 2019 - 2024. All rights reserved.