按照有条件装入一个卷在docker-compose中
我有一个docker-compose.yml
configuration。 其中一个容器是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
- 安装Travis构build版本的docker-engine后期版本
- 无法在docker Ubuntu 16上启动NFS服务器
- 为什么docker用一个数字值作为目录装入一个文件?
- dockerfile可以与系统设置进行交互吗?
- 如何在使用docker-compose时用容器内的主机用户修改卷文件
- 无法使用geopandas加载GDB文件
- 由于无法启动VM,Docker Quickstart失败:C:\ Program Files \ Oracle \ VirtualBox \ VBoxManage.exe
- Nexus3:推送到Docker Group Repo
- pipe理员如何从Docker群中的工作者节点获取数据(或在容器中完成的任何更新)