2017-04-24 14 views
2

ドッカーコンテナ内の既存の環境変数に値を連結しようとしています。 など - docker run -it -e PATH=$PATH:foo continuumio/anacondaドッカーを使って既存のenv varに値を連結

コンテナに既に存在する既存の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コマンドを使用して。とにかく私が目指していることを達成するためにはありますか?

--EDIT--

私は窓10、コマンドラインウィンドウからコマンドを実行しています。

答えて

2

次のことを試してみてください。

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

このコマンドは既存の$PATHに追加してから継承する新しいbashコピー(exec bash)に自身を置き換えるコマンド(-c)を渡し、コンテナ内bashを起動します新しい$PATHの値。あなたも更新シェルでコマンドを実行する場合

は、あなたがexec bashに別の-cオプションを渡しますが、引用することはトリッキー得ることができることに注意してください、そしてトリックは、シェルオープン維持するために必要とされることができます。

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

起動コマンドが終了したときに実行されていたシェルは、コマンドを実行したシェルと同じインスタンスではありません(起動コマンドによってシェル状態(関数、エイリアスなどの定義など) d)。あなたがを試してみました何については


値は外コンテナ、前もっての知られている場合-eで環境変数を設定する唯一の方法です。 -eに渡すものは、のリテラルの値でなければなりません。の内部には、というの定義を参照することはできません。

脇に:WindowsではなくUnixプラットフォームでコマンドを実行した場合、現在のシェルは、$PATHを展開しますが、これも意図していません。

+1

これは私が求めることができるように徹底的な応答です、ありがとうございます。 –

関連する問題