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

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

Другие вопросы по тегам