我正在进行一个简单的Docker构建,其中镜像运行一个脚本,该脚本假定
然而,在使用
然而,如果我在Shell中执行
$USER
已设置,就像在bash shell中通常设置的那样。然而,在使用
/bin/bash
或/bin/bash --login
时,$USER
未设置。最新的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中执行
su -l root
,那么$USER
就会被设置。root@d2728a8188a5:/# su -l root
root@d2728a8188a5:~# echo $USER
root
root@d2728a8188a5:~# exit
我知道可以在 Dockerfile
中添加 ENV USER=root
,但我想避免硬编码这个值。
有人能解释一下为什么会出现这种情况吗?我主要是好奇了解 Docker 启动 bash
时发生了什么。显然它并不完全像一个登录 shell,--login
选项似乎也无法工作。
bash --login
执行时,USER 环境变量被设置。因此,我更新了我的 entrypoint.sh 的 shebang,也加入了/bin/bash --login
,这样就解决了应用程序启动时 USER 环境变量未设置的问题。 - Trevor Boyd Smith