试图将一个值连接到我正在启动的 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 命令行窗口执行命令。
最佳答案
请尝试以下操作:
docker run -it continuumio/anaconda /bin/bash -c "PATH=$PATH:foo exec bash"
此命令启动
bash
在容器中,向它传递一个命令( -c
),该命令附加到现有的 $PATH
然后用新的 bash
替换自己继承新 exec bash
的副本 ( $PATH
)值(value)。如果你还想在更新的shell中执行命令,你可以再传一个
-c
选项 exec bash
,但请注意引用可能会变得棘手,并且需要一个技巧来保持 shell 打开:docker run -it continuumio/anaconda /bin/bash -c "PATH=$PATH:foo exec bash -c 'date; exec bash'"
一个小小的警告是,在启动命令完成时运行的 shell 与运行命令的实例不同(这应该不是问题,除非您的启动命令对 shell 状态进行了修改(例如定义必须保留的函数、别名等)。
至于你试过什么 :
使用
-e
设置环境变量的唯一方法是如果在容器外提前知道该值; 无论你传递给 -e
必须是文字值 - 它不能引用容器内的定义 .顺便说一句:如果你在 Unix 平台而不是 Windows 上运行你的命令,当前的 shell 将扩展
$PATH
,这也不是本意。
关于docker - 使用 docker run 将值连接到现有的环境变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43586827/