gpt4 book ai didi

Docker 回显环境变量

转载 作者:IT老高 更新时间:2023-10-28 13:08:54 24 4
gpt4 key购买 nike

我正在尝试编写一个小 docker 文件来设置一个用户并只是回显当前用户作为一个小例子来向我自己证明它是有效的。我尝试了多种变体,但在文档中找不到太多帮助。

FROM ubuntu
USER daemon
# ENTRYPOINT ["echo", "$USER"]
# just gives "$USER"
# ENTRYPOINT ["echo", "-e", "${USER}"]
# just gives "$USER"
# ENTRYPOINT echo $USER
# gives empty string
# ENTRYPOINT ["/bin/echo", "$USER"]
# just gives "$USER"

我正在运行 docker build .在 dockerfile 上,然后运行 ​​docker run <image-id>并得到结果

预期结果是daemon ,或不带 USER daemon行,我预计 root .可能是一个非常简单的答案。

最佳答案

这是预期的行为,虽然看起来很奇怪!

ENTRYPOINT 是一个列表时(如 ENTRYPOINT ["echo", "$USER"]),它按原样使用,无需进一步解析或解释.所以 $USER 仍然是 $USER,因为在这个过程中没有涉及到用 USER 环境变量的值替换它的 shell。

现在,当 ENTRYPOINT 是字符串时(如 ENTRYPOINT echo $USER),实际执行的是 sh -c "echo $USER",并且 $USER 被环境变量的值替换(如你所料)。

但是,默认情况下没有设置环境变量USER。由登录进程设置;并且当您只运行 sh -c ... 时,不涉及登录过程。

比较运行docker run -t -i ubuntu bashdocker run -t -i ubuntu login -f root时的环境。在前一种情况下,您将获得一个非常基本的环境;在后一种情况下,您将获得您习惯的完整环境(包括USER变量)。

关于Docker 回显环境变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19896767/

24 4 0