Какой самый простой способ получить переменную среды из контейнера докеров, который не был объявлен в файле Dockerfile ?
Например, переменная среды, которая была установлена через какой-то docker exec container /bin/bash
сеанс?
Я могу это сделать docker exec container env | grep ENV_VAR
, но я бы предпочел что-то, что просто возвращает значение.
Я пробовал использовать docker exec container echo "$ENV_VAR"
, но замена, похоже, происходит за пределами контейнера, поэтому я получаю не env var из контейнера, а env var с моего собственного компьютера.
Спасибо.
bash
docker
environment-variables
Citronen
источник
источник
Ответы:
Правильный способ запуска
echo "$ENV_VAR"
внутри контейнера, чтобы в нем происходила подстановка переменных:источник
docker run --rm -it CONTAINER bash -c 'echo "$MY_ENV_VAR"'
container
слово таким, чтобы люди поняли, что это переменнаяЧтобы просмотреть все переменные env:
Чтобы получить один:
источник
docker exec container env
аdocker exec -it container /bin/bash
затемenv
выплюнуть разные вещи. Зачем?docker inspect container
.docker inspect container
похоже, есть такое же ограничение. Если я создаю переменную среды после запуска контейнера, она не отображается при вызовеdocker inspect
(в разделе env).bash
Например, у нас есть несколько контейнеров, которые не поддерживаются командойalpine-node
. Так что использованиеexec container bash -c "echo $ENV_VAR"
не работает. Использованиеexec container env
работает в моем случае. Использованиеexec container printenv
тоже работает.Вы можете использовать
printenv VARIABLE
вместо/bin/bash -c 'echo $VARIABLE
. Это намного проще и не выполняет подстановку:источник
printenv
распечатать все переменные.Обратной стороной использования
docker exec
является то, что для этого требуется работающий контейнер, чтоdocker inspect -f
может быть удобно, если вы не уверены, что контейнер работает.Пример №1. Выведите список переменных среды через пробел в указанном контейнере:
вывод будет выглядеть так:
Пример №2. Выведите каждую переменную env в новой строке и
grep
необходимые элементы, например, настройки контейнера mysql можно получить следующим образом:выведет:
Пример №3. Давайте изменим приведенный выше пример, чтобы получить дружественный к bash результат, который можно напрямую использовать в ваших скриптах:
выведет:
Если вы хотите погрузиться глубже, перейдите к документации по текстовому / шаблонному пакету Go со всеми подробностями о формате.
источник
docker exec
всегда говорил, что мой контейнер не знает.Ни один из приведенных выше ответов не показывает вам, как извлечь переменную из неработающего контейнера (если вы используете
echo
подход сrun
, вы не получите никакого вывода).Просто
run
сprintenv
, например , так:(Обратите внимание, что
docker-compose
вместоdocker
тоже работает)источник
printenv
распечатать все переменные.Если по какой-то причине вы используете VSCode и установили расширение докера , просто right+ clickна докере, который вы хотите проверить (в расширении докера ), clickв Inspect и поиске env , вы найдете все свои значения переменных env
источник
Ответ @aisbaa работает, если вам все равно, когда была объявлена переменная среды. Если вам нужна переменная среды, даже если она была объявлена внутри
exec /bin/bash
сеанса, используйте что-то вроде:Это не очень красиво, но выполняет свою работу.
Чтобы затем получить значение, используйте:
источник
Эта команда проверяет среду процессов стека докеров на хосте:
источник
Мы можем изменить
entrypoint
неработающий контейнер с помощьюdocker run
команды.Пример показывает переменную среды PATH:
с помощью
bash
andecho
: В этом ответе утверждается, чтоecho
никакого вывода не будет, что неверно.с помощью
printenv
источник