【问题标题】:concatenate value to an existing env var using docker run使用 docker run 将值连接到现有的环境变量
【发布时间】:2017-09-21 01:27:06
【问题描述】:

尝试将值连接到我正在启动的 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 environment-variables


    【解决方案1】:

    尝试以下方法:

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

    此命令在容器中启动bash,向其传递一个附加到现有$PATH 的命令(-c),然后将其自身替换为继承新的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'"
    

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


    至于你尝试了什么

    使用-e 设置环境变量的唯一方法是,如果提前知道值,在容器之外您传递给-e 的任何内容都必须是一个文字 值 - 它不能引用容器内容器的定义。

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

    【讨论】:

    • 这是我所要求的尽可能详尽的回复,非常感谢。
    猜你喜欢
    • 2018-04-29
    • 2023-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-22
    • 2018-06-21
    • 1970-01-01
    • 2017-03-13
    相关资源
    最近更新 更多