docker: eksport ENV vs RUN

91

Powiedzmy, że chcę połączyć te polecenia

RUN command_1
ENV FOO bar
RUN command_2

w

RUN command_1 && export FOO=bar && command_2

i zastanawiał się, czy ustawienie zmiennej za pomocą RUN exportvs ENVjest równoważne.

Innymi słowy, czy istnieje różnica między tymi poleceniami w pliku Dockerfile?

ENV FOO bar

vs

RUN export FOO=bar
User314159
źródło

Odpowiedzi:

148

Jak ilustruje wydanie 684 , exportnie będzie się pojawiać na obrazach. (Nie zapominaj, że każda dyrektywa Dockerfile wygeneruje kontener pośredni, zatwierdzony w obrazie pośrednim: ten obraz nie zachowa wyeksportowanej wartości)
ENV:

Zmienne środowiskowe ustawione przy użyciu ENVzostaną zachowane, gdy kontener zostanie uruchomiony z obrazu wynikowego.
Możesz przeglądać wartości za pomocą docker inspecti zmieniać je za pomocą docker run --env <key>=<value>.

Problem ten ilustruje:

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

Kiedy to robię docker run [img] bash -c 'echo $PATH', nigdy nie obejmuje /foo/bar.

Spróbuj

Utwórz nowy plik dockerfile zawierający:

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

Następnie zbuduj. Wynik ostatniego kroku to:

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

Możesz zobaczyć:

  • FOOutrzymuje się przez pojemniki pośrednie, dzięki ENVsłowu kluczowemu;
  • BARnie kontynuuje następnego kroku z powodu exportpolecenia;
  • BAZ jest wyświetlany poprawnie, ponieważ zmienna jest używana w tym samym kontenerze.
VonC
źródło
(Chyba tak, ale :) Czy to znaczy, że dockernp. runZ tymi (przez te argumenty opcji) zmiennymi --env-fileczy --envbędzie je eksportować? Przepraszam, że trafiłem na tak starą odpowiedź, ale wyszukiwarka internetowa właśnie ją wskazała. Dobra odpowiedź przy okazji.
hakre
@hakre tak, są one dołączane do środowiska: patrz stackoverflow.com/a/49872152/6309 i poniżej.
VonC
Dzięki za szybką odpowiedź, ale ta odpowiedź nie pokazuje, że zmienne są zaznaczone do eksportu. Przynajmniej nie dla mnie. W każdym razie należy zrobić własną pracę domową tu np superuser.com/q/450868/63279 lub pubs.opengroup.org/onlinepubs/9699919799/utilities/... .
hakre