gpt4 book ai didi

bash - Docker 为什么没有设置 $USER 环境变量

转载 作者:行者123 更新时间:2023-12-02 18:01:36 26 4
gpt4 key购买 nike

我正在做一个简单的 docker 构建,其中图像运行一个假定 $USER 的脚本设置,就像它通常在 bash shell 中一样。

但是,$USER未设置,当使用 /bin/bash/bin/bash --login .使用最新的 ubuntu 很容易演示

$ docker run -t -i ubuntu:latest
root@1dbeaefd6cd4:/# echo $USER

root@1dbeaefd6cd4:/# exit

$ docker run -t -i ubuntu:latest /bin/bash --login
root@d2728a8188a5:/# echo $USER

root@1dbeaefd6cd4:/# exit

但是,如果在 shell I su -l root ,然后 $USER已设置。
root@d2728a8188a5:/# su -l root
root@d2728a8188a5:~# echo $USER
root
root@d2728a8188a5:~# exit

我知道我可以添加 ENV USER=rootDockerfile ,但我试图避免对值进行硬编码。

有没有人建议为什么会发生这种情况?我主要是出于好奇来了解 Docker 启动时发生了什么 bash .它显然与登录 shell 和 --login 不完全一样。选项似乎不起作用。

最佳答案

The only environment variables documented to be set$HOME , $HOSTNAME , $PATH ,和(也许)$TERM . (docker build RUN 步骤内部相当于 docker run 。)如果您需要设置其他变量,可以使用 ENV指示。

通常在 Dockerfile 中没有特别需要使路径名或用户名可配置,因为它们存在于与主机分开的隔离空间中。例如,将“应用程序”放在 /app 中是非常常见的。即使这不是标准的 FHS 路径。设置一些非 root 用户来实际运行应用程序并使用 USER 被认为是一种最佳实践,尽管很少这样做。 Dockerfile 中的指令。在所有这些情况下,您都知道用户名实际上是什么;它不是任何类型的参数。

关于bash - Docker 为什么没有设置 $USER 环境变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54411218/

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