You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何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的处理逻辑是:

  1. 优先检查本地镜像缓存中是否已有空镜像;
  2. 如果本地没有,会从官方镜像仓库拉取对应版本的空镜像(不同Docker版本可能默认拉取的版本不同)。

由于这两个镜像的文件系统层完全为空,仅配置元数据存在细微差异,因此会生成两个不同的SHA-256哈希,但实际使用时没有任何功能区别——都是不含任何内容的空镜像。

内容的提问来源于stack exchange,提问作者sr-01-01

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 21:12:07