我有一个 Docker 容器,它使用
alpine:3.7
作为基础镜像,因此使用 /bin/ash
作为其 shell。
我将容器置于后台运行模式。我的目的是我可以不断地使用
docker exec $CONTAINER_ID <command>
。因此,该命令将以非交互式、非登录 shell 模式执行。
但是,有时我的
<command>
位于非标准路径中,因此我想export PATH
这样我就不会输入完全限定的路径。或者,有时某些软件安装需要我在 shell 初始化文件中放入一些命令(例如 eval "$(pyenv init -)"
)。
问题是:在
/bin/ash
shell下,对于非交互式、非登录shell命令执行,我可以在哪里导出这个新的PATH
,或者我的eval "$(pyenv init -)"
,这样我就可以用一切都正确加载/来源?如果 Ash 做不到的话我也会考虑 Bash。
蒂亚
docker exec
命名的文件是在交互模式下启动符合 POSIX 的 shell(或 POSIX 模式下的 bash)时,或在任何条件下启动 1999 BSD ash 时获取的。如果您想在非 POSIX 模式下也支持 bash,您还需要设置
ENV
(与传统的 BSD ash 一样,即使对于非交互式 shell,它也受到尊重)。这意味着您可以告诉 Docker 更新环境变量 BASH_ENV
以指向一个文件,当 shell 解释器获取该文件时,该文件将运行
ENV
。