docker ENV против экспорта RUN

95

Скажем, я хочу объединить эти команды

RUN command_1
ENV FOO bar
RUN command_2

в

RUN command_1 && export FOO=bar && command_2

и задавался вопросом, эквивалентна ли установка переменной с помощью RUN exportvs.ENV

Другими словами, есть ли разница между этими командами в Dockerfile?

ENV FOO bar

против

RUN export FOO=bar
Пользователь314159
источник

Ответы:

155

Как показано в проблеме 684 , exportне сохраняется на всех изображениях. (Не забывайте, что каждая директива Dockerfile будет генерировать промежуточный контейнер, зафиксированный в промежуточном образе: этот образ не сохранит экспортированное значение)
ENV:

Переменные среды, заданные с помощью ENV, сохранятся при запуске контейнера из полученного изображения.
Вы можете просматривать значения, используя docker inspect, и изменять их, используя docker run --env <key>=<value>.

Проблема проиллюстрировала это с помощью:

RUN export PATH=$PATH:/foo/bar # from directly in builder

Когда я docker run [img] bash -c 'echo $PATH'его никогда не включаю /foo/bar.

Попытайся

Создайте новый файл докеров, содержащий:

FROM centos:6
ENV FOO=foofoo
RUN export BAR=barbar
RUN export BAZ=bazbaz && echo "$FOO $BAR $BAZ"

Тогда собери его. Результат последнего шага:

Step 4/4 : RUN export BAZ=bazbaz && echo "$FOO $BAR $BAZ"
 ---> Running in eb66196b238d
foofoo  bazbaz

Ты можешь видеть:

  • FOOсохраняется через промежуточные контейнеры благодаря ENVключевому слову;
  • BARне сохраняется на следующем шаге из-за exportкоманды;
  • BAZ отображается правильно, поскольку переменная используется в том же контейнере.
VonC
источник
(Думаю, да, но :) Означает ли это, что, dockerнапример, runс --env-fileили --envбудет экспортировать эти (с помощью этих параметров) переменные? Извините за то, что наткнулся на такой старый ответ, но веб-поиск только что поднял его до меня. Хороший ответ, кстати.
hakre
@hakre да, они добавляются в среду: см. stackoverflow.com/a/49872152/6309 и ниже.
VonC
Спасибо за быстрый ответ, но этот ответ не показывает, что переменные помечены для экспорта. По крайней мере, для меня. В любом случае, я должен делать здесь домашнее задание, например superuser.com/q/450868/63279 или pubs.opengroup.org/onlinepubs/9699919799/utilities/… .
hakre 05