使用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
,这也不是意图。