Сохраняйте ENV в многоступенчатых сборках Docker - PullRequest
4 голосов
/ 23 мая 2019

В прошлый раз, когда я проверял, когда я делал это:

FROM x:latest
ENV foo 'bar'

FROM y:latest
RUN echo "$foo"

тогда «echo $ foo» был пуст - есть ли способ сохранить переменные ENV в многоступенчатых сборках?

1 Ответ

4 голосов
/ 01 июня 2019

A аргумент сборки может работать в этом случае. Пользователь не сможет переопределить его, и он не будет доступен в контейнере, но я думаю, что он подходит.

FROM alpine
ARG FOO
RUN echo first step FOO is $FOO

FROM alpine
ARG FOO
RUN echo second step FOO is $FOO

Для построения необходимо передать --build-arg со значением.

$ docker build --build-arg FOO=bar .
Step 1/6 : FROM alpine
 ---> 055936d39205
Step 2/6 : ARG FOO
 ---> Running in 3f5f18206d06
Removing intermediate container 3f5f18206d06
 ---> 2b82e4b958f7
Step 3/6 : RUN echo first step FOO is $FOO
 ---> Running in c0256dfe286d
first step FOO is bar
Removing intermediate container c0256dfe286d
 ---> 79286b74611f
Step 4/6 : FROM alpine
 ---> 055936d39205
Step 5/6 : ARG FOO
 ---> Running in 9fc20546619f
Removing intermediate container 9fc20546619f
 ---> 30325962d73a
Step 6/6 : RUN echo second step FOO is $FOO
 ---> Running in a8906382909a
second step FOO is bar
Removing intermediate container a8906382909a
 ---> 521dbbfa398b
Successfully built 521dbbfa398b
...