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