Почему переменная env не установлена, когда точка входа находится в состоянии эхо при запуске Docker? - PullRequest
0 голосов
/ 18 января 2019

Почему переменная среды не видна команде, которая запускается как точка входа?
Примеры:

$docker run -it -e "name=JD" --entrypoint 'echo' ubuntu 'Hello $name'
Hello $name  
$ docker run -it -e "name=JD" --entrypoint 'echo' ubuntu "Hello $name"
Hello  

Но когда я запускаю оболочку, там появляется переменная окружения:

$ docker run -it -e "name=JD" ubuntu /bin/bash
root@c3e513390184:/# echo "$name"
JD

Почему в первом случае с echo в качестве точки входа он не находит установленную переменную env?

1 Ответ

0 голосов
/ 18 января 2019

Первый случай

docker run -it -e "name=JD" --entrypoint 'echo' ubuntu 'Hello $name'

Одиночная кавычка всегда препятствует расширению строки. Все, что вы пишете в одинарных кавычках, остается неизменным. Попробуйте echo '$PWD' в своем терминале, и вы увидите $PWD в качестве вывода. Попробуйте echo "$PWD", и вы получите распечатанный рабочий каталог.

Второй случай

docker run -it -e "name=JD" --entrypoint 'echo' ubuntu "Hello $name"

Ваш код расширяется до запуска Docker. Ваша оболочка раскрывает всю строку и затем выполняет ее. На данный момент у вас нет объявленного $name, и вы получите его пустым. Это означает, что внутри контейнера вы получаете команду "Hello ", а не "Hello $name".

Если вы хотите вывести переменную окружения из контейнера, самый простой способ - обернуть скрипт в sh-файл , чтобы предотвратить его расширение и передать этот файл в контейнер.

Третий случай, я думаю, очевиден и не нуждается в объяснении.

...