使用docker run将值连接到现有的env var

尝试将值连接到Docker容器中的现有环境variables我开始。 例如 – docker run -it -e PATH=$PATH:foo continuumio/anaconda

我目前正在试图将一个值连接到已经存在于容器中的现有PATH环境variables。

我希望在容器的PATH环境variables中看到以下值 – PATH=/opt/conda/bin:/usr/lib/jvm/java-8-openjdk-amd64/bin:/usr/local/scala/bin:/usr/local/sbt/bin:/usr/local/spark/bin:/usr/local/spark/sbin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

相反,我得到这个 – PATH=$PATH:foo

使用docker run命令。 无论如何要实现我的目标?

– 编辑 –

我正在执行从Windows 10命令行窗口的命令。

尝试以下操作:

 docker run -it continuumio/anaconda /bin/bash -c "PATH=$PATH:foo exec bash" 

这个命令在容器中启动bash ,传递一个附加到现有的$PATH的命令( -c ),然后用一个新的bash副本( exec bash )replace自己,inheritance新的$PATH值。

如果你还想在更新的shell中执行一个命令,你可以将另一个-c选项传递给exec bash ,但是请注意,引用可能会变得棘手,并且需要一个技巧来保持shell 打开

 docker run -it continuumio/anaconda /bin/bash -c "PATH=$PATH:foo exec bash -c 'date; exec bash'" 

小问题是,启动命令完成时运行的shell与运行命令的shell不是同一个实例(这不应该是一个问题,除非启动命令对shell状态进行了修改(例如定义函数,别名,…)必须保留)。


至于你的尝试

使用-e设置环境variables的唯一方法是在容器外部 提前知道该值; 无论你传递给-e必须是一个文字值 – 它不能引用容器的定义

另外:如果你在Unix平台而不是Windows上运行你的命令,那么当前的 shell会扩展$PATH ,这也不是意图。