2016-02-22 4 views
4

У меня есть переменная в скрипте под названием image_nameDocker Run и подстановки переменных

image_name="my-app" 

И я пытаюсь передать эту переменную в Докер контейнер, как показано ниже:

docker build -t $image_name . 
docker run --rm --name $image_name -e "app_dir=${image_name}" $image_name 

Но эта переменная не задано и пустое в контексте сборки докера

Это фрагмент из файла Docker ниже:

.... 

RUN  echo dir is $app_dir 

.... 

Это фрагмент выхода сборки ниже:

.... 

Step 2 : RUN echo dir is $app_dir 
---> Running in db93a939d701 
dir is 
---> c9f5e2a657d5 
Removing intermediate container db93a939d701 

.... 

Любой знает, как сделать подстановку переменной?

ответ

1

Обратите внимание, что вы используете переменную внутри Dockerfile. Эта переменная будет оцениваться во время сборки (docker build), поэтому вам нужно передать ее значение в этот момент. Этого можно достичь с помощью параметра --build-arg.

Изменение пример, было бы:

docker build --build-arg app_dir=${image_name} -t $image_name . 
docker run --rm --name $image_name $image_name 
1

Это достижимо с помощью параметра из docker build команды

См build-arg: https://github.com/docker/docker/issues/6822#issuecomment-168170031 для примера

+1

Не забудьте также двойные кавычки ваши разложения. –

+0

Не могли бы вы привести пример? Я все еще изучаю скрипты bash –

+1

«Двойная кавычка» каждого литерала, который содержит пробелы/метасимволы и расширение _every_: '' $ var ",' "$ (команда" $ var ")" ',' "$ {array [ @]} "', '" a & b "'. Используйте «одинарные кавычки» для кода или литерала $: «Расходы $ 5 US'',' ssh host 'echo "$ HOSTNAME"' '. См. Http://mywiki.wooledge.org/Quotes, http://mywiki.wooledge.org/Arguments и http://wiki.bash-hackers.org/syntax/words. –

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