Как скопировать переменные между этапами многоэтапной сборки Docker? - PullRequest
0 голосов
/ 20 октября 2018

Я видел только примеры использования COPY для копирования файлов между этапами многоэтапного Dockerfile, но есть ли способ просто скопировать переменную ENV?Мой вариант использования - начать с образа git, чтобы просто получить хеш коммита, который будет частью сборки.Изображение, которое я позже создаю, не имеет git.

Я понимаю, что могу просто передать хэш git в файл и использовать COPY, но мне просто интересно, есть ли более чистый способ?

1 Ответ

0 голосов
/ 21 февраля 2019

У вас есть 3 варианта: решение «ARG», «базовое» решение и «файловое» решение.

ARG version_default=v1

FROM alpine:latest as base1
ARG version_default
ENV version=$version_default
RUN echo ${version}
RUN echo ${version_default}

FROM alpine:latest as base2
ARG version_default
RUN echo ${version_default}

другим способом является использование базового контейнера для нескольких этапов:

FROM alpine:latest as base
ARG version_default
ENV version=$version_default

FROM base
RUN echo ${version}

FROM base
RUN echo ${version}

Более подробную информацию можно найти здесь: https://github.com/moby/moby/issues/37345

Также вы можете сохранитьхеш в файл на первом этапе, и скопируйте файл на втором этапе, а затем прочитайте его и используйте его там.

...