докер ENV проти експорту RUN


91

Скажімо, я хочу поєднати ці команди

RUN command_1
ENV FOO bar
RUN command_2

в

RUN command_1 && export FOO=bar && command_2

і цікавився, чи еквівалентно встановлення змінної за допомогою RUN exportvs.ENV

Іншими словами, чи є різниця між цими командами у файлі Docker?

ENV FOO bar

проти

RUN export FOO=bar

Відповіді:


148

Як показано у випуску 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 відображається правильно, оскільки змінна використовується в одному контейнері.

(Я думаю, так, але :) Чи означає це, що, 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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.