我正在使用以下 Dockerfile 构建一个空映像:
FROM scratch
我在多种环境下尝试过。我得到一个 imageID
71de1148337f
或 471a1b8817ee
。这是为什么 ?为什么有两个不同的哈希码?它与时间戳无关(我会收到超过 2 个 ID)。
对于文字
FROM scratch
,我的 buildx 安装的配置输出(经过哈希处理以获取图像 ID)如下所示:
{"architecture":"amd64","config":{"Env":["PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"],"WorkingDir":"/"},"created":null,"history":null,"os":"linux","rootfs":{"type":"layers","diff_ids":null}}
这恰好哈希到
sha256:471a1b8817eefb6569017c1a76f288e0d4e5c8476eb199485c469d0b033168bf
。对于 71de11...
图像,您需要将其推送到公共位置,我可以显示差异,但这很可能是 json 格式的微小变化(例如省略空字段)。
这个极端案例需要注意以下几点:
可重复性是一个很好的目标,但对于容器镜像来说却并非易事。在我自己的图像中,我在构建后修改它们以删除变异时间戳和其他数据(例如包安装日志)。 buildkit 团队也开始致力于此,从他们在一些最新版本中对 SOURCE_DATE_EPOC 的支持可见一斑。