web-dev-qa-db-ja.com

dockerfileを介してdockerイメージを構築しているときに、cmd行を介してENV変数を渡すことはできますか?

centOsをベースとしてDockerfileを使用してdockerイメージを構築するタスクに取り組んでいます。 dockerfile内のステップの1つでは、プロキシの背後で動作するためにhttp_proxyおよびhttps_proxy ENV変数を設定する必要があります。

このDockerfileは異なるプロキシを持つ複数のチームで使用されるため、各チームのDockerfileを編集する必要はありません。代わりに、ビルド時にENV変数を渡すことができるソリューションを探しています。

Sudo docker build -e http_proxy = somevalue.

これを提供するオプションが既にあるかどうかはわかりません。何か不足していますか?

58
Aniketh

コンテナは、環境変数のように機能するbuild arguments(Docker 1.9以降)を使用して構築できます。

メソッドは次のとおりです。

FROM php:7.0-fpm
ARG APP_ENV=local
ENV APP_ENV ${APP_ENV}
RUN cd /usr/local/etc/php && ln -sf php.ini-${APP_ENV} php.ini

次に、実稼働コンテナーをビルドします。

docker build --build-arg APP_ENV=prod .

特定の問題の場合:

FROM debian
ENV http_proxy ${http_proxy}

次に実行します:

docker build --build-arg http_proxy=10.11.24.31 .

docker-composeを使用してコンテナをビルドする場合、 docker-compose.ymlファイルでこれらのビルド引数を指定 が可能ですが、コマンドラインではできません。ただし、 環境変数を使用するdocker-compose.ymlファイルの変数置換 を使用できます。

95
Sin30

私は同じ状況に直面しました。

Sin30の答えによると、かなりの解決策はシェルを使用することです。

CMD ["sh", "-c", "cd /usr/local/etc/php && ln -sf php.ini-$APP_ENV php.ini"]
1
Tugrul