Переменная окружения не может быть изменена в контейнере Docker

docker run -e HOST_IP:xxxx

И я использую cmd, чтобы проверить, env HOST_IP изменена:

docker exec CONTAINER_ID env |grep HOST_IP 

Я обнаружил, что это не изменилось после этих попыток:

docker exec CONTAINER_ID bash -c 'export HOST_IP=XXX'
docker exec CONTAINER_ID bash -c 'echo HOST_IP=XXX >> ~/.bashrc && source ~/.bashrc'

Зачем? Что контролировало env переменная?

2 ответа

Может быть, вам просто нужно использовать форму

docker run -e NEW_ENV_VAR='new_var_val'

как упомянуто в: Как передать переменные среды в контейнеры Docker?

Вы можете проверить, введя команду env для работающего контейнера:

sudo docker exec -it running-container-name env

Докер exec каждый раз запускает вашу команду в новом сеансе (bash или sh) и, следовательно, ваш exportПеременные окружения исчезли при следующем выполнении.

Если вы хотите постоянно изменять переменные окружения во время выполнения контейнеров Docker, я могу думать только о том, чтобы скопировать ваши переменные в /etc/environment и bash будет импортировать их, если это настроено, или вы можете export HOST_IP=XXX в .bashrc для того же эффекта.

Но помните, что в этом сценарии ваше приложение в докере по-прежнему не может поднять его, если оно не использует bash при запуске. В этом случае вам нужно заставить ваше приложение читать переменные из файла или тому подобное.

Другие вопросы по тегам