2016-09-20 4 views
7

ビルド中にドッキングコンテナに環境変数を設定しようとしていますが、成功しません。実行コマンドを使用するときにそれらを設定しますが、ビルド中にそれらを設定する必要があります。ドックでビルド中に環境変数を設定するには

Dockerfile

FROM ubuntu:latest 
ARG TEST_ENV=something 

私は

docker run -dit myimage 

私は

docker exec containerid printenv 
0123を使って、利用可能な環境変数をチェックしてるの実行

docker build -t --build-arg TEST_ENV="test" myimage . 

を構築するために使用しているコマンド

と結果が

PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin 
HOSTNAME=e49c1abfd58b 
TERM=xterm 
no_proxy=*.local, 169.254/16 
HOME=/root 

TEST_ENVが

答えて

17

ARGdocker buildプロセス中に使用される環境変数を設定するためのものである存在していないです - 彼らはなぜドンである、最終的な画像には存在しませんdocker runを使用すると表示されません。

ARGは、イメージの作成時にのみ関連し、イメージから実行するコンテナには必要ない設定に使用します。環境変数には、ビルド中およびコンテナ内で使用するためにENVを使用できます。このDockerfileで

FROM ubuntu                            
ARG BUILD_TIME=abc                          
ENV RUN_TIME=123                          
RUN touch /env.txt                          
RUN printenv > /env.txt 

あなたはdocker build -t temp --build-arg BUILD_TIME=def .で行ったようにあなたがビルド引数を上書きすることができます。そして、あなたが期待するものを手に入れる:

> docker run temp cat /env.txt                       
HOSTNAME=b18b9cafe0e0                         
RUN_TIME=123                           
HOME=/root                            
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin              
BUILD_TIME=def                           
PWD=/ 
+0

はENV'は、環境変数を追加しますが、 'ドッカ-t一時--build-argをBUILD_TIME = def'を構築する版画「は、一つ以上のビルド引数[BUILD_TIME]がいた使用して'使い方消費されず、ビルドに失敗しました。 " 別々の 'ARG BUILD_TIME_ARG = default'と' ENV BUILD_TIME = $ BUILD_TIME_ARG'を追加すると助けになりました。答えに追加できますか? ありがとうございます。 –

+0

「ENG」と同じ名前の 'ARG'を作ることができたことを知りました。 'ARG BUILD_TIME = default'' ENV BUILD_TIME = $ BUILD_TIME' –

+0

皮肉なことにEltonの答えは正しいものではありません。マイケルの最後のコメントは、頭の中で釘を打ち、実際にビルドを通じて環境変数を設定する方法を示しています(この執筆時点で)。 –

関連する問題