为什么环境变量对于作为入口点运行的命令不可见?
范例:
$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
但是,当我启动shell时,环境变量在那里:
$ docker run -it -e "name=JD" ubuntu /bin/bash
root@c3e513390184:/# echo "$name"
JD
为什么在以echo
作为入口点的第一种情况下,它找不到env变量集?
答案 0 :(得分:0)
第一种情况
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"
在运行之前,先扩展您的代码。您的shell展开整个字符串,然后执行它。目前,您没有声明$name
,但将其清空。这意味着在容器内部您将获得"Hello "
命令,而不是"Hello $name"
。
如果要从容器内部回显环境变量,最简单的方法是将脚本包装到sh文件中以防止其扩展并将此文件传递给容器。
我想第三种情况很明显,不需要解释。