Пакет сборки Spring Boot 2.3.0 собирает образ с датой создания 40 лет назад

Я пытался использовать buildpack в проекте maven с работающей Spring Boot 2.3.0:

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 лет назад?


person Aleksandr Erokhin    schedule 12.07.2020    source источник


Ответы (1)


Это ожидаемо. Для создания воспроизводимых сборок (т. е. для повторного использования слоев) пакет сборки должен создавать слои с фиксированной отметкой времени. В противном случае вы не сможете повторно использовать слои, созданные в предыдущих сборках, потому что они будут иметь разные временные метки.

person codefinger    schedule 12.07.2020
comment
Разве слои не используются повторно на основе хэша? Я действительно не понимаю, какое это имеет отношение к отметке времени и почему нельзя было указать настоящую. Не могли бы вы уточнить? - person Aleksandr Erokhin; 25.10.2020
comment
Временная метка файла изменяет хэш. Многие сборщики контейнеров следующего поколения (buildpacks, jib, ko) используют фиксированные, не совсем нулевые значения временных меток, чтобы гарантировать воспроизводимость изображений. - person codefinger; 26.10.2020
comment
Это совсем не ожидаемо. Похоже, разработчики не смогли понять, как создать эффективный хэш, и вместо этого прибегли к поддельной метке времени. - person Abhijit Sarkar; 16.11.2020
comment
Это то, что делают многие другие инструменты (ко, джиб и т. д.). Объяснение здесь: medium.com/buildpacks/time-travel-with-pack-e0efd8bf05db - person codefinger; 17.11.2020
comment
Хотя это правда, что другие инструменты также предлагают эту опцию, они, конечно, также предлагают возможность использовать текущее время, потому что это то, что ожидает большинство людей. При использовании Quarkus из коробки (который использует jib) мы получаем ожидаемую текущую метку времени. При замене построителя докеров на jib в весенней загрузке мы можем установить время создания USE_CURRENT_TIMESTAMP и получить желаемый результат. Как насчет поддержки этого в buildpack? - person malamut; 02.03.2021
comment
Я согласен с malamut - это, безусловно, похоже на то, чего можно было бы ожидать - почему хэш должен меняться с отметкой времени файла - учет даты не похож на звуковой дизайн для хеша... - person IARI; 26.04.2021