2017-06-13 6 views
2

Dockerfileで使用できるビルトイン環境変数$HOSTNAMEがあることを私に教えてくれた有益な情報がありました。かなりの量の検索では、そのような組み込み変数の包括的なリストを見つけることができませんでした。 Dockerfileのリファレンスでは、ENVコマンドを使用して環境変数を変更する方法について説明していますが、今はその必要はありません。私はちょうどデフォルトで利用可能なものを知りたいです。これに関する公式の文書はありますか?私はそこにあると思うだろうとHOSTNAMEでいくつかの検索を行うことは私にそれを指摘するだろうが、サイコロ。Dockerfileビルトイン環境変数ドキュメント

答えて

2

デフォルトで利用可能なものを知りたいだけです。

各画像によって異なります。

docker run <image> env 

または::例えば

docker inspect <image> -f '{{.Config.Env}}' 

$ docker run ubuntu env 
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin 
HOSTNAME=71fc7d5db1f2 
no_proxy=*.local, 169.254/16 
HOME=/root 

$ docker inspect ubuntu -f '{{.Config.Env}}' 
[PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin] 

または:

$ docker run node env 
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin 
HOSTNAME=42bbb311714a 
no_proxy=*.local, 169.254/16 
NPM_CONFIG_LOGLEVEL=info 
NODE_VERSION=7.10.0 
YARN_VERSION=0.24.4 
HOME=/root 

$ docker inspect node -f '{{.Config.Env}}' 
[PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin 
NPM_CONFIG_LOGLEVEL=info NODE_VERSION=7.10.0 YARN_VERSION=0.24.4] 

PSあなたは変数がこれをやって、それぞれ1で定義されているかを確認することができます:実行中のコンテナでも同じことができます:

docker inspect <container-id> -f '{{.Config.Env}}' 
docker exec <container-id> env 
+0

それは多くの助けになります。メモとして、私はrunコマンドのために異なった答えを得、アルパインを検査する。 runコマンドは3つの値を与え、検査はそれらのうちの1つだけを与えます。 – JimmyJames

+1

'docker run'バージョンは' env'を実行する新しいコンテナを実行します。ドッカーがその新しいプロセスを実行して、 'docker run'パラメータ' --hostname'のために、その時点でドッカーが設定する特別な変数であるHOSTNAMEを提供しているようです。私は同じイメージに基づいて複数のコンテナとは異なるので、イメージにその変数を持つ意味がないと信じています。 – Robert

+0

あなたは私が見つけようとしていたものの要点になっています。それは、ドッカーエンジンがそれを管理しているためにのみ知ることができる値です。私が今解決したい問題は基本的には工夫されていますが、そのコンテキストをデフォルトで提供できることは一般的には有用です。 – JimmyJames

1

私はほとんどがhttps://github.com/moby/moby/blob/34536c498d56a0c74fab08bd434407ac4707c971/container/container_unix.go#L57-L72で起こっていると思います。私は$HOSTNAMEがドッカー固有のものだとは言いません。ほとんどのLinuxディストリビューションではよくあり、多くのスクリプト/シェルがそれを使用しています。 Dockerは起動時にホスト名変数を設定する完全なinitシステム(Ubuntuの/etc/init.d/hostname.shなど)を実行していないので、設定されていることを確認します。

tty(-t)を指定すると、デフォルトの$PATH$TERMが設定されているようです。 --linkを使用して別のコンテナ(現在廃止されている機能)をリンクすると、自分で指定できる環境変数に加えて、一連の環境変数も利用できます。 https://docs.docker.com/engine/userguide/networking/default_network/dockerlinks/#environment-variablesを参照してください。

+0

素晴らしいもの。偶然にも、群集クラスタの実行時やオーバーレイネットワークの使用時に類似の変数が作成されているかどうかを知ることができますか?今私にとって役に立つものの1つは、ノードのIPアドレスです。環境変数に入れるだけで大​​変便利です。 – JimmyJames

+0

スワームによる別の注射があるかどうかわかりません。おそらく、注入されたものを見るために、イメージに組み込まれている変数と実際の実行中の出力を比較するだけで済みます。より多くのコードを掘り下げることなく、おそらく見つけにくいでしょう(そして、すでに検索されているようにどこにも記載されていない可能性が高い)。 –