按照有条件装入一个卷在docker-compose中

我有一个docker-compose.ymlconfiguration。 其中一个容器是Tomcat服务器,它在webapps目录中部署了一些默认的.war文件。

我想有能力通过(覆盖)的war档案部署由一些驻留在主机上。 我认为最好的办法是有能力以某种方式切换/重写启动docker-compose :作为默认,我想运行在容器内的webapp( war文件),但是我想有一个可能性来挂载一个目录我的主机(例如在开发/debugging期间),如果需要的话。

目前,我有我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 

有没有更好的办法如何实现这一目标?

而不是(不)挂载一个注释掉该行的卷,我将使用https://docs.docker.com/compose/extends/#example-use-case运行指定卷的服务扩展。

我这样做是为了解决两个不同的问题:

  • 当docker映像打算在生产环境中运行时,我没有指定一个卷,并将所有必要的文件捆绑在一起。
  • 我在开发过程中指定一个卷,以检查实时更改。

假设.war文件名是“app.war”…你可以使用像这样的envvariables覆盖它:

卷:
  -  ./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 cp /a/volume/path/app.war /usr/local/tomcat/webapps/app.war