6.4. 使用可重复生成的容器构建


您可以使用 --source-date-epoch 和- rewrite- timestamp 选项构建可重复生成的容器镜像,将 ARG SOURCE_DATE_EPOCH 添加到 ContainerFile。

流程

  • 在运行 Buildah 命令时设置这些选项。例如,要从 Containerfile 构建镜像,并将所有时间戳强制到特定时间点:

    Use a specific, immutable image.
    FROM registry.access.redhat.com/ubi10/ubi:10.0 AS builder
    
    # Set the SOURCE_DATE_EPOCH for deterministic timestamps
    ARG SOURCE_DATE_EPOCH
    ENV SOURCE_DATE_EPOCH=${SOURCE_DATE_EPOCH:-1}
    
    # Build the image using the build-arg and rewrite-timestamp options
    buildah bud --build-arg --source-date-epoch=${SOURCE_DATE_EPOCH} \
      --rewrite-timestamp \
      -f Containerfile \
      -t my-reproducible-image .
    Copy to Clipboard Toggle word wrap
  • 运行带有一致时间戳的 podman build 命令,以创建可重复生成的镜像:

    # Set a consistent timestamp using the last Git commit date
    export SOURCE_DATE_EPOCH=$(git log -1 --pretty=%ct)
    Copy to Clipboard Toggle word wrap
  • 使用指定时间戳构建镜像:

    podman build --source-date-epoch=${SOURCE_DATE_EPOCH} --rewrite-timestamp -t my-reproducible-app .
    Copy to Clipboard Toggle word wrap

验证

  • 构建后,再次运行可重复生成的命令。如果构建真正可重复生成,buildah inspect 命令应显示相同的镜像摘要。

    buildah bud --build-arg --source-date-epoch=${SOURCE_DATE_EPOCH} \ --rewrite-timestamp \ -f Containerfile \ -t my-reproducible-image-2 .
    Copy to Clipboard Toggle word wrap
  • 比较摘要:

    buildah inspect --format '{{.Digest}}' my-reproducible-image
    buildah inspect --format '{{.Digest}}' my-reproducible-image-2
    Copy to Clipboard Toggle word wrap
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2026 Red Hat
返回顶部