2015-12-02 25 views
30

Dockerファイルで宣言されていないドッカーコンテナから環境変数を取得する最も簡単な方法は何ですか?例えばドッカーコンテナから環境変数を取得

、いくつかdocker exec container /bin/bashセッションを介して設定されている環境変数?

私はdocker exec container env | grep ENV_VARを行うことができますが、私はちょうど値を返すものを好むだろう。

私はdocker exec container echo "$ENV_VAR"を使用しようとしましたが、コンテナの外で起こるように見えるので、コンテナからenv varを取得するのではなく、自分のコンピュータのenv varを取得します。

ありがとうございました。 1を取得するには

docker exec container env 

:すべてのenv変数を表示するには

+0

envとgrepを使用しない理由がありますか? – aisbaa

+0

私は値が必要です。私が正しく理解していれば、grep呼び出しの出力を解析する必要があり、むしろそれを回避したいと思います。 – Citronen

+0

私はexecセッションで設定された変数が、プライマリプロセスまたは後続のexecセッションに影響しないと思っていましたか? –

答えて

54

:その値、使用を取得するには

/bin/bash -c 'echo $VARIABLEの代わりに。それははるかに簡単だし、置換を実行しません:

docker exec container printenv VARIABLE 
+0

これらの回答はすべてシェルによって異なります。私は実行可能ファイルとスクラッチベースイメージでenv変数を取得できません。 – Richard

+0

'docker run --rm -it CONTAINER bash -c 'echo" $ MY_ENV_VAR "'' – Henrik

23

環境変数が宣言されたとき、あなたは気にしない場合aisbaaの答え@

docker exec container env | grep VARIABLE | cut -d'=' -f2 
+0

私の質問は、私はそのルートに行くことを望んでいると言います。また、 'docker exec container env'と' docker exec -it container/bin/bash'をフォローアップし、 'env'は別のものを吐き出します。どうして? – Citronen

+0

ああ...これをケースにするドッカーの画像を構築している具体的な方法かもしれません... – Citronen

+0

今、もっと難しいです。 'docker inspect container'を試してみてください。 – aisbaa

0

で動作します。あなたはそれがexec /bin/bashセッションの中で宣言されている場合でも、環境変数を使用する場合は、のようなものを使用します。

IFS="=" read -a out <<< $(docker exec container /bin/bash -c "env | grep ENV_VAR" 2>&1) 

をそれは非常にきれいではありませんが、それは仕事を取得します。あなたはprintenv VARIABLEを使用することができます

docker exec container bash -c 'echo "$ENV_VAR"' 
+0

jwodderの答えを参照してください。 – Citronen

26

:変数の代入は容器に起こるように、コンテナ内echo "$ENV_VAR"を実行するための適切な方法がある

echo ${out[1]} 
12

docker execを使用しての欠点は、それがコンテナを実行しているを必要とすることであるので、あなたは、コンテナが実行されているわからない場合はdocker inspect -fは便利かもしれません。

例#1。出力指定されたコンテナ内のスペースで区切られた環境変数のリスト:

docker inspect -f \ 
    '{{range $index, $value := .Config.Env}}{{$value}} {{end}}' container_name 

出力は次のようになります。

ENV_VAR1=value1 ENV_VAR2=value2 ENV_VAR3=value3 

例#2。出力それぞれのenv新しい行にvarとgrep必要な項目は、例えば、MySQLのコンテナの設定は、次のように取り出すことができます。

docker inspect -f \ 
    '{{range $index, $value := .Config.Env}}{{println $value}}{{end}}' \ 
    container_name | grep MYSQL_ 

意志出力:

MYSQL_PASSWORD=secret 
MYSQL_ROOT_PASSWORD=supersecret 
MYSQL_USER=demo 
MYSQL_DATABASE=demodb 
MYSQL_MAJOR=5.5 
MYSQL_VERSION=5.5.52 

例#3。あなたがより深く潜りたい場合は、その後に行く

export MYSQL_PASSWORD=secret 
export MYSQL_ROOT_PASSWORD=supersecret 
export MYSQL_USER=demo 
export MYSQL_DATABASE=demodb 
export MYSQL_MAJOR=5.5 
export MYSQL_VERSION=5.5.52 

docker inspect -f \ 
    '{{range $index, $value := .Config.Env}}export {{$value}}{{println}}{{end}}' \ 
    container_name | grep MYSQL 

意志出力:さんが直接あなたのスクリプトで使用することができますbashの優しい出力を得るために、上記の例を修正してみようGoのtext/template形式の詳細がすべて記載されたパッケージドキュメント。

関連する問題