Spring Boot 2.3.0构建包使用创建日期为40年前的镜像进行构建

23

我尝试在一个使用Spring Boot 2.3.0的Maven项目中使用构建包:

mvn spring-boot:build-image

图片已成功创建,但我看到了以下有关它的信息:

REPOSITORY                                    TAG                     IMAGE ID            CREATED             SIZE
gcr.io/paketo-buildpacks/builder              base-platform-api-0.3   daceb4f909b7        40 years ago        690MB
myimage                                       master                  a482a4a34379        40 years ago        285MB

为什么它显示这张图片(以及建造者)是40年前创建的?


在 buildpacks 存储库中发现了这个:https://github.com/buildpacks/rfcs/pull/50/files,其中包含指向 https://reproducible-builds.org/docs/source-date-epoch/ 的链接。仍然不确定它与构建映像有何关系。 - Aleksandr Erokhin
2个回答

12
这是设计上的考虑。为了创建可重复生成的构建(例如,以便可以重用层),构建包必须使用固定时间戳来创建层。否则,您将无法重用先前构建中创建的层,因为它们具有不同的时间戳。

3
图层不是基于哈希值被重复使用吗?我真的不明白这与时间戳有什么关系,为什么不能指定真实的时间戳。您能否详细说明一下? - Aleksandr Erokhin
1
文件的时间戳会改变哈希值。许多下一代容器构建工具(如buildpacks、jib、ko)使用固定的、接近零的时间戳值来保证镜像的可重复性。 - codefinger
14
这真的是出乎意料的。看起来建造者们无法想出有效的哈希算法,于是只好采用了一个虚假的时间戳。 - Abhijit Sarkar
10
虽然其他工具也提供了此选项,但它们当然也提供使用当前时间的选项,因为这是大多数人所期望的。当使用默认设置的 Quarkus(使用 jib)时,我们得到了预期的当前时间戳。当在 Spring Boot 中用 jib 替换 docker builder 时,我们可以将创建时间设置为 USE_CURRENT_TIMESTAMP 并获得所需的结果。那么在构建包中也支持这个选项如何? - malamut
1
我同意malamut的观点 - 这确实看起来像任何人都会期望的 - 为什么哈希值会随着文件的时间戳而改变 - 考虑日期并不是哈希设计的合理之处... - IARI
显示剩余5条评论

4

在新版本中,您可以进行设置。 这里是Gradle示例

bootBuildImage {
      imageName = "docker.io/ringo"
      createdDate = "now"
}

你有这个的文档链接吗? - Bryan Acuña Núñez
2
仅在新的3.1.0 RC 1版本中可用。https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-3.1.0-RC1-Release-Notes - kozla13
是的,那就是我看到的:D 谢谢。 - Bryan Acuña Núñez
版本3.1.0已发布 :) - Bryan Acuña Núñez

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接