2015-04-02 2 views
1

У меня есть два контейнера webinterface и db, в то время как webinterface запускается с помощью --link вариант (для db), который генерирует переменные окруженияКак динамически устанавливать переменные среды связанных контейнеров?

DB_PORT_1111_TCP=tcp://172.17.0.5:5432 
DB_PORT_1111_TCP_PROTO=tcp 
DB_PORT_1111_TCP_PORT=1111 
DB_PORT_1111_TCP_ADDR=172.17.0.5 
... 

Теперь мой webinterface контейнер использует в Dockerfile, где некоторые статические переменные среды определяются для определения соединение:

Зная, что есть также -e вариант для docker run, про я проблема в том, что я хочу использовать эти переменные в Dockerfile (используется в некоторых сценариях), но перезаписать их значения, полученных с помощью опции --link, то есть что-то вроде:

docker run -d -e DB_HOST=$DB_PORT_1111_TCP_ADDR 

Это будет использовать определенные переменные окружения хозяина, который здесь не работает. Есть ли способ справиться с этим?

+0

, когда вы используете обновления док-станции флага /link/etc/hosts - можете ли вы просто ссылаться на DB_HOST на имя хоста? – Jimmy

+0

Что происходит при попытке запуска docker -d -e DB_HOST = "$ DB_PORT" _1111_TCP_ADDR – booyaa

+0

@jimmy: это только для имени хоста –

ответ

0

Это переменный вопрос расширения так, чтобы решить, попробуйте следующее:

docker run -d -e DB_HOST="$DB_PORT"_1111_TCP_ADDR

0

С процессом Unix, который уже работает, его переменные окружения могут быть изменены только внутри процесса, а не от снаружи, поэтому они несколько нединамичны по своей природе.

Если вы обнаружите, что ссылки Docker ограничены, вы не единственный человек там. Одним простым решением для этого будет использование WeaveDNS. С помощью WeaveDNS вы можете просто использовать порты по умолчанию (как в случае с сетью наложения Weave нет необходимости открывать/публиковать/переназначать любые внутренние порты) и разрешать каждый компонент через DNS (т. Е. Ваше приложение просто должно искать db.weave.local, t должен быть осведомлен о неуклюжей схеме переменных окружения, в которой присутствуют ссылки Docker). Чтобы лучше понять, как работает WeaveDNS, проверьте one of the official getting started guides. WeaveDNS эффективно предоставляет вам сервисное обнаружение без необходимости изменять приложение, которое у вас есть.

+0

_Disclaimer: Я из Weave team._ – errordeveloper

Смежные вопросы