2016-12-27 2 views
1

Мне нужно установить переменную окружения в рабочем контейнере докера. Я уже знаю способ установки переменной среды при создании контейнера. Насколько я понял, нет прямого способа сделать это с докером, и докер планирует добавить что-то с новой версией 1.13.установить переменную среды в рабочем докере contianer

Но я обнаружил, что некоторые люди могут управлять им, который сейчас не работает для меня. Я попытался следующие способы, но не работает для Ме-

docker exec -it -u=root test /bin/bash -c "export port=8090" 

эхо «экспортный порт = 8090» в /etc/bash.bashrc с помощью сценария, а затем источник его

docker exec -it test /bin/bash -c "source /etc/bash.bashrc" 

настройки целиком в скрипте и запустить его с хоста также не сработало. При запуске скрипта из хоста все остальные команды успешно выполняются, за исключением «export port = 8090» или «source /etc/bash.bashrc» или «source /root/.bashrc».

Может ли кто-нибудь объяснить, почему файл источника с хоста не работает в контейнере докера, даже когда я устанавливаю пользователя («- u = root»)? Может ли кто-нибудь помочь мне решить эту проблему? Когда я отправляю файл из контейнера, он работает отлично. Но в моем случае я должен делать это с хост-машины

Примечания:, я использую докер 1.12 и попытался выше в убунту: 16.04 и убунт: 14,04

+0

Как вы знаете, что окр не установлен? Вы попробовали 'docker exec -it mydocker bash', а затем один раз на континенте:' printenv'? Кроме того, я бы попытался сначала войти в контейнер с первой командой, затем установить env и запустить источник. – cen

+0

Я иду в контейнер (/ bin/bash) и проверяю переменные среды, чтобы определить переменную, есть или нет. Я должен был упомянуть, в моем случае я не могу попасть в контейнер, чтобы загрузить файл. Забудьте упомянуть, что источник изнутри контейнера работает отлично. Я отредактировал мой вопрос. –

+0

Еще одна вещь, которую вы могли бы попробовать, - это поместить команды в файл bash, скопировать файл в контейнер с докере, а затем выполнить это или выполнить свое приложение. Основываясь на вашем другом комментарии, вероятно, лучше всего найти другой способ настройки вашего скрипта. Динамическая конфигурация обычно не является чем-то, что делается с помощью env vars. – cen

ответ

-1

Я нахожу способ предоставить переменную среды в запущенный контейнер. Кулак обновит ваш докер-двигатель. Я использую V1.12.5.

создать скрипт с окружающей средой variables-

#!/bin/bash 

echo "export VAR1=VAL1 
export VAR2=VAL2" >> /etc/bash.bashrc 
source /etc/bash.bashrc 

Теперь запустите контейнер.Здесь, 'тест' является имя контейнера:

docker run -idt --name=test ubuntu 

Скопируйте скрипт в контейнер:

docker cp script.sh test:/ 

Выполнить сценарий:

docker exec -it test /bin/bash -c "/script.sh" 

Перезапустите контейнер:

docker restart test 

Перейти в контейнер, который она Л.Л.

docker exec -it test /bin/bash 

Проверьте переменную

echo $VAR1 
0

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

Я бы вместо этого имел конфигурационный файл, который файл читает (или слушает) периодически. И когда вы хотите изменить конфигурацию, измените файл.

Если это не ваш сценарий, опишите свой сценарий, чтобы мы могли лучше помочь вам.

+0

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

+0

@zamansakib Контейнер не может работать без процесса. В вашем примере вы используете bash как процесс. – lvthillo

+0

@ lorenzvth7- вы правы. Я действительно пытался сказать, что ни один процесс не работает, который использует переменную среды, которую я хочу обновить. Спасибо что подметил это –