Не сохраняются переменные в докер контейнере. Почему?
Допустим я захожу в работающий докер-контейнер в котором переменная $NUMBER=one будучи определена через docker-compose env-файлом.
docker exec -it <идентификатор контейнера> /bin/sh
и внутри контейнера, в консоли переопределяю ее значение либо через прокинутый уже внутрь контейнера file.env командой
source file.env
либо через export на $NUMBER=two,либо еще как-то: не суть. Если я внутри контейнера после этого выведу echo $NUMBER , то получу two.
А вот если я выйду из контейнера CTRL+D и снова в него войду при помощи той же команды
docker exec -it <идентификатор контейнера> /bin/sh
то получу в консоли по echo $NUMBER ответ "one". Почему так происходит, ведь контейнер я не останавливал?
Ответы (1 шт):
Это ни как не связано с программой docker. Это больше относится к устройству *nix подобных систем.
Если вам нужно "сохранить" переменную окружения для последующих сессий, то в файле настройки вашей оболочки (bash, sh, zsh, fish, csh, dash и тд) нужно указать:
вариант для bash
$HOME/.bashrc или $HOME/.bash_history
...
export $NUMBER=one
...
Но контейнерный подход предполагает передавать все переменные окружения во время старта
docker run --file Dockerfile --env "VAR=val" --env "VAR1=val1" <image-name>:<tag-name> .
или определить все переменные в файле и передать во время старта
docker run --name <container-name> --file path/to/Dockerfile --env-file <image-name>:<tag-name> .
Как я понимаю идею контейнеров - это сиюминутная изоляция окружения, которая предопределена во время старта, если нужна манипуляция с переменными окружения, ручная настройка (Ansible, Puppet, Chef и тд) установка пакетов, предсказуемая перезагрузка то смотрите в сторону полноценных виртуальных машин - VirtualBox, KVM/Qemu, Xen и тд. Или разворачивайте все локально на боевом сервере под GNU/Linux или *BSD.