为何Docker镜像哈希不可复现?(以FROM scratch为例)
为什么用
FROM scratch构建的空镜像会出现两个不同的ID? 问题描述
我使用以下Dockerfile构建空镜像:
FROM scratch
在多个环境中尝试后,得到的镜像ID要么是71de1148337f,要么是471a1b8817ee。这并非时间戳导致的(否则会得到更多不同ID),想知道为什么会出现这两个不同的哈希值?
解答
这两个ID都是Docker生态中被广泛认可的空镜像,本质功能完全一致,区别仅在于镜像的配置元数据细节:
471a1b8817ee是较新版本的空镜像,其配置包含适配现代Docker版本的元数据(比如规范的created字段格式、适配新存储驱动的参数)。71de1148337f是旧版本的空镜像,配置元数据相对简单,常见于早期Docker环境或遗留的本地镜像缓存中。
当你执行docker build使用FROM scratch时,Docker的处理逻辑是:
- 优先检查本地镜像缓存中是否已有空镜像;
- 如果本地没有,会从官方镜像仓库拉取对应版本的空镜像(不同Docker版本可能默认拉取的版本不同)。
由于这两个镜像的文件系统层完全为空,仅配置元数据存在细微差异,因此会生成两个不同的SHA-256哈希,但实际使用时没有任何功能区别——都是不含任何内容的空镜像。
内容的提问来源于stack exchange,提问作者sr-01-01
相关产品推荐
相关产品推荐

