Использовать переменные среды в докере

Реализовал докер-проект для автоматической настройки. Я использую docker 1.9 на сервере Ubuntu и использую функцию build-arg. Я использую его для установки динамического поддомена в файле виртуальных хостов apache.

 docker build --no-cache --build-arg domain=demo1.myapp.com -t imagename .
 docker run -d -p 8080:80 imagename

Я использую домен и заменяю его в файле виртуальных хостов с помощью команды sed в моем файле сценария.

sed -i -e "s/defaulthost.com/$domain/g" /etc/apache2/sites-enabled/myApp.conf

В моем Dockerfile был код

ARG domain 
RUN /bin/sh /script.sh $domain

Теперь мне нужно перенести приложение на AWS, где я получаю Amazon Linux AMI. Но здесь я получаю поддерживаемый докер версии 1.7, который не поддерживает build-arg. Я пытался обновиться, но меня блокируют многие зависимости.

Теперь я решил использовать переменные среды ENV, как показано ниже.

docker run -d -p 8080:80 -e domain=demo1.myapp.com 

Я также изменил файл Docker, например

В моем Dockerfile был код

RUN /bin/sh /script.sh

Но похоже, что они не работают в моем сценарии, поскольку во время сборки сценарий sed заменяет пустое значение в файле apache, и процесс сборки не удался.

Если это невозможно без аргумента сборки или я неправильно устанавливаю / использую ENV


person kuldeep.kamboj    schedule 18.11.2015    source источник


Ответы (1)


Во-первых, AWS может поддерживать докер 1.9.
См., Например, "Обеспечение работы оверлейных сетей в AWS с помощью Docker 1.9"


Если вы решили остаться со старым AMI и его докером 1.7, тогда -e опция предназначена только для времени выполнения (создание / запуск контейнеров), а не для времени сборки (изображение).

Это означает, что если ваш ENTRYPOINT или CMD был: /script.sh, используя внутри скрипт $domain (и затем запустив ваш основной процесс), это сработает.

person VonC    schedule 30.11.2015
comment
Да, к счастью, вчера я сам обнаружил проблему с окружающей средой. Поскольку у меня мало опыта работы с Docker, я не знаю, нужно ли запускать скрипт с CMD, а не с RUN, чтобы использовать переменные среды. Итак, после запуска скрипта в CMD переменная среды, похоже, работает. - person kuldeep.kamboj; 01.12.2015
comment
Что касается первого, да, я знаю, что могу заменить Ubuntu на Amazon EMI, но это будет последнее решение, если альтернативы не существует. - person kuldeep.kamboj; 01.12.2015
comment
@ kuldeep.kamboj Я согласен: я просто хотел охватить все аспекты, упомянув часть AMI. - person VonC; 01.12.2015