执行gradlew bootBuildImage拉取的Docker镜像显示41年前创建是什么原因?
为什么通过bootBuildImage拉取的Buildpack镜像创建时间显示为41年前
你执行docker images看到的如下时间异常输出属于正常设计,并非故障:
pack.local/builder/qxoshxwcye latest 41 years ago 782MB paketobuildpacks/builder base 41 years ago 782MB
具体原因如下:
- 该特性来自Cloud Native Buildpacks(CNB)的可复现构建设计规范:所有官方发布的Buildpack基础镜像、以及通过Buildpack构建生成的镜像,都会将镜像各层的创建时间硬编码为固定值
1980-01-01 00:00:00 UTC,选择这个时间点是因为它是FAT文件系统支持的最早时间戳,可以兼容更多运行环境。 - 固定时间戳的核心作用是消除构建过程中的非业务变量:只要构建输入的代码、依赖、配置完全一致,无论在任何时间、任何机器上执行构建,最终生成的镜像哈希值完全相同,方便镜像校验、缓存复用、合规审计等场景落地,避免时间戳这类无关因素导致相同内容构建出的镜像存在差异。
- Spring Boot的
bootBuildImage任务底层默认采用Paketo Buildpacks实现镜像构建,你拉取的Paketo官方builder镜像、后续构建生成的应用镜像都会默认使用该固定时间戳,因此docker images查询时会显示为40多年前,完全不影响镜像的正常使用。
内容的提问来源于stack exchange,提问作者Bartosz Bilicki
相关产品推荐
相关产品推荐

