2017-04-24 16 views
2

試圖將值連接到docker容器中的現有環境變量我開始了。 例如 - docker run -it -e PATH=$PATH:foo continuumio/anaconda使用docker run將值連接到現有env var

我目前被困在試圖連接一個值到現有的PATH環境變量已經存在的容器中。

我期待看到在容器的PATH環境變量以下值 - 使用docker run命令PATH=$PATH:foo

- 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

相反,我得到這個。無論如何要實現我的目標?

- EDIT--

我正在執行從Windows 10命令行窗口的命令。

回答

2

嘗試以下操作:

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

此命令在容器啓動bash,傳遞一個附加到現有$PATH的命令(-c),然後替換自己與新bash副本(exec bash)繼承新的值爲$PATH

如果你也想在更新的外殼執行命令,你可以通過另一個-c選項exec bash,但請注意,報價可能很麻煩,而且需要一招,以保持一個shell 開放

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

小問題是,啓動命令完成時運行的shell與運行命令的shell不是同一個實例(這應該不是問題,除非啓動命令對該命令進行了修改shell必須保留的狀態(如定義函數,別名等) d)。


至於你試過

設置環境變量與-e的唯一方法是,如果值是已知的的時間提前容器; 無論你傳遞給-e必須是文字值 - 它不能引用定義裏面的容器。另外:如果你在Unix平臺而不是Windows上運行你的命令,那麼當前的 shell會擴展$PATH,這也不是意圖。

+1

這是儘可能全面的迴應,我可以要求,非常感謝。 –

相關問題