使用 docker run 将值连接到现有环境变量

Yar*_*dan 5 environment-variables docker

尝试将一个值连接到我正在启动的 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 命令行窗口执行该命令。

mkl*_*nt0 4

请尝试以下操作:

docker run -it continuumio/anaconda /bin/bash -c "PATH=$PATH:foo exec bash"
Run Code Online (Sandbox Code Playgroud)

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

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

docker run -it continuumio/anaconda /bin/bash -c "PATH=$PATH:foo exec bash -c 'date; exec bash'"
Run Code Online (Sandbox Code Playgroud)

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


至于你尝试过的

设置环境变量的唯一方法是容器外部提前知道-e该值;无论您传递给什么,都必须是文字值 - 它不能引用容器内的定义。-e

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