我有一个docker-compose.yml
配置。其中一个容器是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
有没有更好的方法来实现这一目标?
答案 0 :(得分:12)
由于extend
在版本3中已被删除,因此存在一种新的方法来覆盖设置,方法是提供多个-f参数,其中下一个文件扩展了先前的配置
文档在版本https://docs.docker.com/compose/extends/#multiple-compose-files之间混合
即在开发模式下运行
docker-compose -f docker-compose.yml -f docker-compose.dev.yml
docker-compose.yml
包含完整的配置,而docker-compose.dev.yml
仅添加一个卷
services:
serviceA:
volumes:
-.:/usr/local/abc/service
答案 1 :(得分:7)
我会使用this example来运行指定卷的服务扩展名,而不是(不)安装注释掉该行的卷。
我这样做是为了解决两个不同的问题:
答案 2 :(得分:3)
让我们说.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 cp /a/volume/path/app.war /usr/local/tomcat/webapps/app.war