2015-11-26 9 views
41

私のドッカーファイルという変数を定義したいと思います。後でDockerfileで使用します。Dockerfileで変数を定義する方法は?

私はENV命令を認識していますが、これらの変数を環境変数にする必要はありません。

は、Dockerfileスコープで変数を宣言する方法はありますか?私の知る限り

+7

あなたはARGを使用することができます - https://docs.docker.com/engine/reference/builder/#arg – lumos0815

+0

@ lumos0815を参照してください、私はそれが古いポストだにもかかわらず、(あなたがあなたの答えとして、それを投稿するべきだと思います。後世のために)それはOPが求めているものなのです。 – shriek

答えて

34

あなたはARGを使用することができますが - https://docs.docker.com/engine/reference/builder/#arg

を参照してくださいARG命令は、ユーザーが --build-arg <varname>=<value>フラグを使用してdocker buildコマンドを使用して、ビルダーに ビルド時に渡すことができる変数を定義します。ユーザーがビルド 引数をDockerfileで定義されていないと指定した場合、ビルドは エラーを出力します。

21

、唯一ENVは変数がDockerfileによって解釈されるよう(ENV文で宣言された)「Environment replacement

環境変数は、特定の命令でも使用することができるで述べたように、ということができます。

Dockerfileの各行に対して作成された新しいコンテナごとに、docker buildで再宣言するためには、環境変数でなければなりません。

つまり、これらの変数はDockerfileではなく、Dockerfile行用に作成されたコンテナ内で直接解釈されるため、環境変数を使用します。


この日、私はARGdocker 1.10+, and docker build --build-arg var=value)とENVの両方を使用しています。
ARGを単独で使用すると、実行時に変数が表示されず、であることを意味します。

マイDockerfileが通常持っている:あなたのケースでは

ARG var 
ENV var=${var} 

ARGが十分である:私はHTTP_PROXY変数を設定するための一般的に使用し、そのドッキングウィンドウのビルドは、ビルド時にインターネットにアクセスするために必要です。

6

変数が同じRUN命令内で再使用される場合は、単にシェル変数を設定することができます。私は彼らがofficial Ruby Dockerfileでこれにどのようにアプローチしたか、本当に好きです。

関連する問題