2016-07-27 5 views
2

たとえば、ビルド中にフェッチするために認証が必要なファイルをインストールするために、環境変数をビルド時にドッカーファイルに渡すことは可能ですか?ビルド時に環境変数をDockerfileに渡す

+0

[Dockerでビルド時に動的環境変数を作成する](http://stackoverflow.com/questions/27711304/create-dynamic-environment-variables-at-build-time-in-docker) – baxang

答えて

3

この方法はあなたが望むものを達成しますが、秘密にはお勧めできません(秘密は難しい)。

Build Argsを使用できます。 DockerfileにARG命令を置き、Dockerfile内で参照できるようにすることです。

$ docker build --build-arg some-thing=some-value . 

この意志:あなたがイメージを構築するときに、あなたのようなdocker buildARGを渡すことができ

... 
RUN echo $some-thing 
... 

FROM alpine:3.3 
ARG some-thing=<optional default value> 

あなたは次のようにDockerfileの後半で、この変数を使用することができますARG 'some-thing'としてDockerのビルドプロセスに「some-value」を渡します。

あなたARG秒の

echo $some-thing 
"some-value" 

値がないがが終了画像に永続化され得ると思います。パスワードなどが最終的なイメージに漏れることを心配する必要はありません。しかし、Dockerは秘密を渡す方法としてこれを推奨していません。

+3

秘密のために推奨されない理由は、コマンドがDockerの履歴に終わるからです。 – ldg

-1

ドッカーファイルはこれを実現するためにEntrypointを提供します。イメージのエントリポイントとしてシェルスクリプトを作成することができます。このシェルスクリプトは、いくつかのコマンドをパラメータとして使用できます。

Hereは最近作成した例です。 entrypoint scriptはSSHキーペアをパラメータとしてとり、コンテナ内のプライベートgitリポジトリをクローンします。

+0

このすべてのものはイメージで焼かれますか?これは答えではありません。 – johnharris85

+0

@Jハリス申し訳ありませんが、私はあなたの点を得ることはありません。 「すべてのもの」の意味を教えてください。スクリプトやパラメータなどのものは? –

+0

OK、そうではありません。あなたがしていることは本当にわかりません。あなたのイメージは、中間のクローンを作成することによって別のイメージを構築します。なぜ私はマシンにクローンを作成してから配布する前にコードをコピーしていないのですか? – johnharris85

0

docker build --helpを実行すると、どの引数を受け入れるかがわかります。あなたがそれを見てみると:

使用方法を理解できない場合は、完全なDockerドキュメントを参照してください。

関連する問題