gpt4 book ai didi

docker - 为什么在docker run上将入口点设为echo时未设置env变量?

转载 作者:行者123 更新时间:2023-12-02 20:00:17 25 4
gpt4 key购买 nike

为什么环境变量对于作为入口点运行的命令不可见?
例子:

$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变量集?

最佳答案

第一种情况

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的之前,将代码扩展为 。您的shell展开整个字符串,然后执行它。目前,您没有声明$name,但将其清空。这意味着在容器内部,您将得到"Hello "命令,而不是"Hello $name"

如果要从容器内部回显环境变量,最简单的方法是将将脚本包装到sh文件中,以防止其扩展并将此文件传递给容器。

我猜第三种情况很明显,不需要解释。

关于docker - 为什么在docker run上将入口点设为echo时未设置env变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54257446/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com