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

标签 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 命令行窗口执行命令。

最佳答案

请尝试以下操作:

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/

相关文章:

python - 如何与 anaconda 64 位一起安装 python 32 位

windows - 如何在Windows上设置多行环境变量?

mysql_upgrade 失败 - innodb 表不存在?

linux - 无法以 root 身份登录 Oracle Linux Docker 容器

mysql - docker-compose.yml spring boot mysql配置

ubuntu - 如何在 Ubuntu 中设置 Java 环境路径

environment-variables - cd 到带有空格的路径名的环境变量 : no such file or directory

docker - 如何在主机上访问docker app?

docker-compose 规模容器警告

mysql - 将 CGI REMOTE_ADDR 转换为网络字节顺序以便与 MySql INET_NTOA 一起使用