web-dev-qa-db-ja.com

Dockerコンテナから環境変数を取得

Dockerコンテナから環境変数を取得する最も簡単な方法は何ですかDockerfileで宣言されていません

例えば、いくつかのdocker exec container /bin/bashセッションを通して設定された環境変数はどうでしょうか。

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

私はdocker exec container echo "$ENV_VAR"を使用しようとしました、しかし、置換はコンテナの外で起こるようです、それで私はコンテナからenv varを得ませんが、むしろ私のコンピュータからenv varを得ます。

ありがとう。

83
Citronen

変数置換がコンテナ内で行われるようにコンテナ内でecho "$ENV_VAR"を実行する適切な方法は、次のとおりです。

docker exec container bash -c 'echo "$ENV_VAR"'
104
jwodder

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

docker exec container env

取得するには:

docker exec container env | grep VARIABLE | cut -d'=' -f2
80
aisbaa

printenv VARIABLEの代わりに/bin/bash -c 'echo $VARIABLEを使用することができます。それははるかに簡単であり、それは代用を実行しません:

docker exec container printenv VARIABLE
49
gentooboontoo

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直接使用できるbashにやさしいの出力を得るために上記の例を修正しましょう。あなたのスクリプトで:

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

出力されます:

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

さらに深く掘り下げたい場合は、Goの text/template パッケージのドキュメントにアクセスし、フォーマットの詳細をすべて確認してください。

42

上記の答えはどれも、実行されていないコンテナから変数を抽出する方法を示していません(echorunと一緒に使用した場合、出力は得られません)。

以下のように、単にrunprintenvを組み合わせてください。

docker run --rm <container> printenv <MY_VAR>

dockerの代わりにdocker-composeも機能します)

3
sarink

このコマンドは、ホスト内のdocker stackプロセスの環境を検査します。

pidof   dockerd containerd containerd-shim | tr ' ' '\n' \
      | xargs -L1 -I{} -- Sudo xargs -a '/proc/{}/environ' -L1 -0
0
MatteoOreficeIT

@ aisbaaの答えは、環境変数がいつ宣言されたかを気にしなくてもうまくいきます。 exec /bin/bashセッション内で宣言されていても、環境変数が必要な場合は、次のようにします。

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

それはそれほどきれいではありませんが、それは仕事をやり遂げます。

値を取得するには、次のようにします。

echo ${out[1]}
0
Citronen