Как использовать команду экспорта для установки переменной среды с помощью docker exec?

У меня есть работающий док-контейнер, использующий предка my_base_image. Теперь, когда контейнер запущен, могу ли я установить переменную среды с помощью команды экспорта с docker exec? если да, то как?

Я пытался использовать следующее, но не работает

docker exec -i -t $(docker ps -q --filter ancestor=`my_base_image`) bash -c "export my_env_var=hey"

В основном я хочу установить my_env_var=hey как переменную env внутри контейнера докеров. Я знаю, что это можно сделать разными способами, используя .env_file или env ключ docker-compose и ENV в Dockerfile. Но я просто хочу знать, возможно ли это с помощью команды docker exec


person Kingz    schedule 31.10.2019    source источник


Ответы (1)


Это невозможно. Процесс никогда не может изменить окружение какого-либо другого процесса, кроме самого себя, за исключением того, что он может указать начальное окружение запускаемых им процессов. В этом случае ваша оболочка docker exec не запускает основной процесс-контейнер, поэтому она не может изменить переменные среды этого процесса.

Это одно из ряда изменений, для которых вам потребуется остановить, удалить и заново создать контейнер. Вы должны относиться к этому как к чрезвычайно рутинному обслуживанию контейнера и планировать в конечном итоге удалить контейнер. Это означает, например, хранение любых данных, которые необходимо сохранить, вне контейнера, в идеале во внешней базе данных, но, возможно, и в смонтированном томе.

person David Maze    schedule 31.10.2019
comment
как насчет входа в контейнер с exec -it и экспорта env. вары в оболочке? - person rok; 31.10.2019
comment
Это повлияет на эту оболочку и больше ни на что. docker exec действительно не должно быть частью вашего основного рабочего процесса, особенно для подобных изменений конфигурации. - person David Maze; 31.10.2019