Jaki jest najprostszy sposób uzyskania zmiennej środowiskowej z kontenera platformy Docker, który nie został zadeklarowany w pliku Dockerfile ?
Na przykład zmienna środowiskowa, która została ustawiona podczas jakiejś docker exec container /bin/bash
sesji?
Mogę to zrobić docker exec container env | grep ENV_VAR
, ale wolałbym coś, co po prostu zwraca wartość.
Próbowałem użyć docker exec container echo "$ENV_VAR"
, ale wydaje się, że podstawianie odbywa się poza kontenerem, więc nie otrzymuję zmiennej env z kontenera, ale raczej zmienną env z własnego komputera.
Dzięki.
bash
docker
environment-variables
Citronen
źródło
źródło
Odpowiedzi:
Prawidłowy sposób uruchomienia
echo "$ENV_VAR"
w kontenerze, aby podstawianie zmiennych następowało w kontenerze, to:źródło
docker run --rm -it CONTAINER bash -c 'echo "$MY_ENV_VAR"'
container
słowo tak, aby ludzie zrozumieli, że to zmiennaAby wyświetlić wszystkie zmienne env:
Aby go zdobyć:
źródło
docker exec container env
idocker exec -it container /bin/bash
, a następnieenv
wypluć różne rzeczy. Czemu?docker inspect container
.docker inspect container
wydaje się mieć takie same ograniczenia. Jeśli utworzę zmienną środowiskową po uruchomieniu kontenera, nie pojawi się ona w wywołaniudocker inspect
(w sekcji env).bash
poleceniealpine-node
. Więc używanieexec container bash -c "echo $ENV_VAR"
nie działa. Używanieexec container env
działa w moim przypadku. Używanieexec container printenv
również działa.Możesz użyć
printenv VARIABLE
zamiast/bin/bash -c 'echo $VARIABLE
. Jest znacznie prostszy i nie wykonuje podstawienia:źródło
printenv
wypisać wszystkie zmienne.Wadą używania
docker exec
jest to, że wymaga działającego kontenera, więcdocker inspect -f
może być przydatne, jeśli nie masz pewności, że kontener działa.Przykład 1. Wyprowadź listę rozdzielonych spacjami zmiennych środowiskowych w określonym kontenerze:
wynik będzie wyglądał następująco:
Przykład nr 2. Wypisz każdą zmienną env w nowej linii i
grep
potrzebne elementy, na przykład ustawienia kontenera mysql można pobrać w następujący sposób:wyświetli:
Przykład nr 3. Zmodyfikujmy powyższy przykład, aby uzyskać przyjazne dla basha wyjście, które może być bezpośrednio użyte w twoich skryptach:
wyświetli:
Jeśli chcesz zagłębić się głębiej, przejdź do dokumentacji pakietu tekstowego / szablonu Go ze wszystkimi szczegółami formatu.
źródło
docker exec
zawsze mówił, że mój pojemnik nie jest znany.Żadna z powyższych odpowiedzi nie pokazuje, jak wyodrębnić zmienną z niedziałającego kontenera (jeśli użyjesz
echo
podejścia zrun
, nie otrzymasz żadnych danych wyjściowych).Po prostu
run
zprintenv
, jak to:(Zauważ, że
docker-compose
zamiastdocker
działa też)źródło
printenv
wypisać wszystkie zmienne.Jeśli przypadkiem używasz VSCode i zainstalowałeś rozszerzenie docker , po prostu right+ clickna dockerze, który chcesz sprawdzić (w rozszerzeniu docker ), clickw Inspect , i tam wyszukaj env , znajdziesz wszystkie wartości zmiennych env
źródło
Odpowiedź @ aisbaa działa, jeśli nie obchodzi cię, kiedy została zadeklarowana zmienna środowiskowa. Jeśli chcesz zmienną środowiskową, nawet jeśli została zadeklarowana w
exec /bin/bash
sesji, użyj czegoś takiego:Nie jest zbyt ładny, ale spełnia swoje zadanie.
Aby następnie uzyskać wartość, użyj:
źródło
To polecenie sprawdza środowisko procesów stosu dockera na hoście:
źródło
entrypoint
Niedziałający kontener możemy modyfikowaćdocker run
poleceniem.Przykład pokazuje zmienną środowiskową PATH:
using
bash
andecho
: Ta odpowiedź twierdzi, żeecho
nie da żadnych wyników, co jest niepoprawne.za pomocą
printenv
źródło