オルタナティブA) 私はあなたが間違って行っていると言うでしょうここにパス。イメージの作成中に行うのではなく、エントリーポイントの間にこれを行うことをお勧めします。
ドッカーでは、最初のコンテナの開始時にサービスを設定することが非常に一般的であり、ベストプラクティスです。データベースをシードし、パスワードとシードを生成し、あなたの場合のように、テンプレートに基づいて構成を生成します。
通常、これらの設定ファイルは、docker run
に、またはより複雑な環境では、consulやetcdなどの複雑な環境では、docker run
に渡されるか、またはdocker-compose.yml
に制御されます。
たとえば、 ENV変数 'USE_SSL'を導入して、エントリポイントにsed
を使用してserver.xml内の何かを置き換えるか、それが設定されているときに何かを置き換えるか、revers_proxyドメインやものを設定するなど、 :https://github.com/markround/tiller
server.xml.erbファイルを作成し、動的にする変数を配置し、USE_SSLが設定されていない場合にセクションを除外する場合は条件を使用し、空白にはデータソースとしてENVIRONMENTを使用させます。
オルタナティブb)は あなたが本当に「イメージビルドの」コンセプト(推奨されません)に滞在したい場合は、いわゆるbuild_args https://docs.docker.com/engine/reference/commandline/build/
があなたのドッキングウィンドウのファイルに
ARG USE_SSL
RUN /some_script_you_created_to_generate_server_xml.sh $USE_SSL
これを追加使用する必要があります
さらに、bash/whateverスクリプトsome_script_you_created_to_generate_server_xml.sh
が必要です。このスクリプトはargsを受け取り、必要に応じて条件を作成します。しかし、ビルダーは画像をビルドするときに `docker buildを使用することができます。 ` docker build。 --build-arg USE_SSL = no -t yourtag