Docker ENV vs RUN Export


91

Angenommen, ich möchte diese Befehle kombinieren

RUN command_1
ENV FOO bar
RUN command_2

in

RUN command_1 && export FOO=bar && command_2

und fragte mich, ob das Setzen der Variablen mit RUN exportvs ENVäquivalent war.

Mit anderen Worten, gibt es einen Unterschied zwischen diesen Befehlen in einer Docker-Datei?

ENV FOO bar

vs.

RUN export FOO=bar

Antworten:


147

Wie in Ausgabe 684 dargestellt , exportbleibt es nicht über Bilder hinweg bestehen. (Vergessen Sie nicht , dass jeder Dockerfile Richtlinie wird einen Zwischenbehälter erzeugen, in ein Zwischenbild begangen: das Bild wird die exportierte Wert nicht erhalten)
ENVwerden:

Die mit festgelegten Umgebungsvariablen ENVbleiben bestehen, wenn ein Container aus dem resultierenden Image ausgeführt wird.
Sie können die Werte mit anzeigen docker inspectund mit ändern docker run --env <key>=<value>.

Das Problem illustrierte dies mit:

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

Wenn ich es tue docker run [img] bash -c 'echo $PATH', schließt es nie ein /foo/bar.

Versuch es

Erstellen Sie eine neue Docker-Datei mit:

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

Dann baue es. Die Ausgabe des letzten Schritts lautet:

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

Du kannst sehen:

  • FOObleibt dank des ENVSchlüsselworts durch Zwischencontainer bestehen ;
  • BARbleibt beim nächsten Schritt aufgrund des exportBefehls nicht bestehen ;
  • BAZ wird korrekt angezeigt, da die Variable im selben Container verwendet wird.

(Ich denke ja, aber :) Bedeutet das, dass dockerzB runmit ( --env-fileoder --envmit diesen Optionsargumenten) Variablen exportiert wird oder wird? Es tut mir leid, dass ich auf eine so alte Antwort gestoßen bin, aber eine Websuche hat sie mir gerade gebracht. Schöne Antwort übrigens.
hakre

@hakre Ja, sie werden an die Umgebung angehängt: siehe stackoverflow.com/a/49872152/6309 und darunter.
VonC

Vielen Dank für die schnelle Antwort, aber diese Antwort zeigt nicht, dass die Variablen für den Export markiert sind. Zumindest nicht für mich. Wie dem auch sei, sollte ich hier meine eigenen Hausaufgaben machen, zB superuser.com/q/450868/63279 oder pubs.opengroup.org/onlinepubs/9699919799/utilities/... .
hakre
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.