2016-06-19 4 views
26

Если установить переменную окружения, скажем ENV ADDRESSEE=world, и я хочу использовать его в точке входа сценарий каскадного в фиксированной строки, как:Как использовать переменную окружения Docker в массиве ENTRYPOINT?

ENTRYPOINT ["./greeting", "--message", "Hello, world!"] 

с world является значением окружающей среды varible, как я сделай это? Я пробовал использовать "Hello, $ADDRESSEE", но это, похоже, не работает, поскольку оно принимает $ADDRESSEE буквально.

ответ

53

Вы используете форму управления ENTRYPOINT. В отличие от формы оболочки форма exec не вызывает командную оболочку. Это означает, что нормальной обработки оболочки не происходит. Например, ENTRYPOINT [ "echo", "$HOME" ] не будет делать замену переменных в $ HOME. Если вы хотите обработать оболочку, то либо используйте форму оболочки , либо выполните оболочку напрямую, например: ENTRYPOINT [ "sh", "-c", "echo $HOME" ].
При использовании EXEC формы и исполнение оболочки непосредственно, как и в случае для формы оболочки, это оболочка, которая делает расширение переменного окружения, не докер. (От Dockerfile reference)

В вашем случае, я будешь использовать образует оболочку,

ENTRYPOINT ./greeting --message "Hello, $ADDRESSEE\!" 
+1

Это очень полезный совет, который я не видел ни в одном из учебников, которые я прочитал. – ChrisGuest

+1

'ENTRYPOINT java -jar /dockertest.jar -Djava.security.egd = файл:/dev /./ urandom -Dserver.port = $ port' while' ENV port = 123'. Порт ENV не разрешен. Любые идеи почему? – xetra11

-2

Спасибо Я вращался нагнетанием адреса IP-приложению Java внутри Docker контейнера из файла Docker с:

ENTRYPOINT ["sh", "-c", "/usr/bin/java -cp /usr/share/tag/container-test.jar -DseleniumHubHost=$SELENIUM_HUB org.testng.TestNG /usr/share/tag/basic-flow-module.xml"] 

как вы упомянуть оболочки, который делает varibable исполнения ордеров

благодаря

+0

Пожалуйста, не добавляйте ответы, чтобы сказать спасибо –

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