web-dev-qa-db-ja.com

条件付きでdocker-composeにボリュームをマウントする

私はdocker-compose.yml設定。コンテナの1つにTomcatサーバーがあり、デフォルトの.warファイルはwebappsディレクトリに展開されています。

ホストマシンに常駐する一部のユーザーによって展開されるwarアーカイブを渡す(オーバーライドする)機能が必要です。私は最高の方法は、何らかの方法で切り替え/オーバーライドを開始する能力を持つことだと思いますdocker-compose:デフォルトとして、コンテナ内にあるwebapp(warファイル)を実行したいのですが、ホストからディレクトリをマウントできるようにしたい(たとえば、開発/デバッグ中)必要なら。

現在、私のdocker-compose.yml。デフォルトが必要な場合はコメント化されています。

volumes:
# By default, there is the latest version of the application already present in the container
# If you want to provider the container with your own .war file, uncomment the following line
# - ./application/webapps:/usr/local/Tomcat/webapps

それを達成するより良い方法はありますか?

19
fxmasa

その行をコメントアウトするボリュームをマウントする(しない)代わりに、 https://docs.docker.com/compose/extends/#example-use-case を使用して、指定するサービス拡張を実行しますボリューム。

これは、2つの異なる問題に取り組むために行います。

  • Dockerイメージが実稼働環境で実行され、必要なすべてのファイルがバンドルされている場合、ボリュームを指定しません。
  • 開発中にボリュームを指定して、ライブの変更を確認します。
10
dgulabs

.warファイル名が「app.war」だとしましょう。次のようなenv変数を使用して上書きできます。

 volumes:
-./application/webapps/${APPLICATION_ENV}.war:/usr/local/Tomcat/webapps/app.war

その後、別のwarファイルを実行する必要がある場合は、APPPLICATION_ENV値を、コンテナーを実行して再起動するために必要な値に変更するだけです。

docker-composeに「条件付きボリューム」があるとは思いませんが、その方法で環境に応じてapp.warを変更できます。

他の方法は、docker-compose up/startの後にスクリプトを実行して上書きし、必要な場合にのみ実行します。

 docker-compose exec your-container-name-name cp /a/volume/path/app.war /usr/local/Tomcat/webapps/app.war