Was ist der einfachste Weg, um eine Umgebungsvariable aus einem Docker-Container abzurufen, der nicht in der Docker-Datei deklariert wurde ?
Zum Beispiel eine Umgebungsvariable, die in einer docker exec container /bin/bash
Sitzung festgelegt wurde?
Ich kann es tun docker exec container env | grep ENV_VAR
, aber ich würde etwas bevorzugen, das nur den Wert zurückgibt.
Ich habe versucht, zu verwenden docker exec container echo "$ENV_VAR"
, aber die Ersetzung scheint außerhalb des Containers zu erfolgen, sodass ich die env-Variable nicht aus dem Container, sondern die env-Variable von meinem eigenen Computer erhalte.
Vielen Dank.
bash
docker
environment-variables
Citronen
quelle
quelle
Antworten:
Die ordnungsgemäße Ausführung
echo "$ENV_VAR"
im Container, damit die Variablensubstitution im Container erfolgt, ist:quelle
docker run --rm -it CONTAINER bash -c 'echo "$MY_ENV_VAR"'
container
Wort so, dass die Leute verstehen, dass es eine Variable istSo zeigen Sie alle env-Variablen an:
Um einen zu bekommen:
quelle
docker exec container env
unddocker exec -it container /bin/bash
und dannenv
verschiedene Dinge ausspucken. Warum?docker inspect container
.docker inspect container
scheint die gleiche Einschränkung zu haben. Wenn ich nach dem Ausführen des Containers eine Umgebungsvariable erstelle, wird diese nicht in einem Aufruf vondocker inspect
(im Abschnitt env) angezeigt.bash
zum Beispiel mehrere Container, die nicht mit Befehl unterstützt werdenalpine-node
. Die Verwendungexec container bash -c "echo $ENV_VAR"
funktioniert also nicht. Mitexec container env
Arbeiten für meinen Fall. Verwendenexec container printenv
funktioniert auch.Sie können
printenv VARIABLE
anstelle von verwenden/bin/bash -c 'echo $VARIABLE
. Es ist viel einfacher und führt keine Substitution durch:quelle
printenv
um alle Variablen zu drucken.Der Nachteil der Verwendung
docker exec
besteht darin, dass ein laufender Container erforderlich ist.docker inspect -f
Dies kann hilfreich sein, wenn Sie nicht sicher sind, ob ein Container ausgeführt wird.Beispiel 1. Geben Sie eine Liste der durch Leerzeichen getrennten Umgebungsvariablen im angegebenen Container aus:
Die Ausgabe sieht folgendermaßen aus:
Beispiel 2. Geben Sie jede env var in einer neuen Zeile und
grep
die benötigten Elemente aus. Beispielsweise können die Einstellungen des MySQL-Containers wie folgt abgerufen werden:wird ausgegeben:
Beispiel 3. Lassen Sie uns das obige Beispiel ändern, um eine bash-freundliche Ausgabe zu erhalten, die direkt in Ihren Skripten verwendet werden kann:
wird ausgegeben:
Wenn Sie tiefer eintauchen möchten, lesen Sie die Dokumentation zum Text- / Vorlagenpaket von Go mit allen Details des Formats.
quelle
docker exec
Ich habe immer gesagt, mein Container ist nicht bekannt.Keine der obigen Antworten zeigt Ihnen, wie Sie eine Variable aus einem nicht laufenden Container extrahieren (wenn Sie den
echo
Ansatz mit verwendenrun
, erhalten Sie keine Ausgabe).Einfach
run
mitprintenv
, wie so:(Beachten Sie, dass
docker-compose
stattdocker
funktioniert auch)quelle
printenv
um alle Variablen zu drucken.Wird durch Zufall Sie verwenden VSCode und hat die installierte Docker Erweiterung , nur right+ clickauf der Docker Sie (innerhalb des zu überprüfenden Docker Erweiterung ), clickauf Inspizieren und dort für die Suche env finden Sie alle Ihre finden env Variablen Werte
quelle
Die Antwort von @ aisbaa funktioniert, wenn es Ihnen egal ist, wann die Umgebungsvariable deklariert wurde. Wenn Sie die Umgebungsvariable möchten, auch wenn sie innerhalb einer
exec /bin/bash
Sitzung deklariert wurde , verwenden Sie Folgendes:Es ist nicht sehr hübsch, aber es erledigt den Job.
Verwenden Sie:
quelle
Dieser Befehl überprüft die Umgebung der Docker-Stack-Prozesse auf dem Host:
quelle
Wir können
entrypoint
einen nicht laufenden Container mit dem änderndocker run
Befehl .Beispiel show PATH Umgebungsvariable:
using
bash
undecho
: Diese Antwort behauptet, dassecho
keine Ausgabe erzeugt wird, was falsch ist.mit
printenv
quelle