尝试将值连接到我正在启动的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命令行窗口执行命令。
答案 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
,这也不是意图。