使用docker run

时间:2017-04-24 11:25:59

标签: docker environment-variables

尝试将值连接到我正在启动的docker容器中的现有环境变量。 例如 - docker run -it -e PATH=$PATH:foo continuumio/anaconda

我目前陷入了尝试将值连接到容器中已存在的现有PATH环境变量的问题。

我希望在容器的PATH环境变量中看到以下值: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命令行窗口执行命令。

1 个答案:

答案 0 :(得分:2)

尝试以下方法:

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

此命令在容器中启动bash,向其传递一个附加到现有-c的命令($PATH),然后将其替换为新的bash副本( exec bash)继承了新的$PATH值。

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

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

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

至于您尝试的内容

使用-e设置环境变量的唯一方法是,如果值提前容器外; 传递给-e的任何内容都必须是文字值 - 它无法引用 容器中的定义。

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