Почему переменная env не установлена, когда точка входа находится в состоянии эхо при запуске Docker?
Почему переменная среды не видна команде, которая запускается как точка входа?
Примеры:
$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 ответ
Первый случай
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-файл, чтобы предотвратить его расширение, и передать этот файл в контейнер.
Третий случай очевиден и не нуждается в объяснении.