Docker tomcat编辑扩展的war文件
我正在使用docker来部署运行第三方war
文件的tomcat容器。
我的Dockerfile
看起来像这样
FROM tomcat:7-jre8 ADD my.war ${CATALINA_HOME}/webapps/my.war
当我运行容器时,tomcat在运行时扩大了我的war
,我可以很高兴地通过http://my.ip.addr:8080/mywar/
访问我的应用程序。
但是我的问题是,我想在war
编辑一些configuration文件。 我真的不想打包和重新打包war
文件,因为这似乎凌乱,难以维护。
我希望能够告诉tomcat作为我的RUN
步骤的一部分扩大war
,然后使用ADD
放入我的自定义文件,但我似乎无法find一个这样做的方式。 战争只有在CMD
执行时才会扩大,之后我无法编辑这些文件。
我不确定你是怎么用docker或者其他东西来实现的,因为我没有看到tomcat在实际启动之前就把这个战争扩大了。 但按照标准做法,爆炸战争和调整内容并不是一个好主意。 它杀死了打仗的全部目的。
相反,您应该对应用程序进行更改以从“TOMCAT_HOME”/ conf中读取configuration。
如果你做到这一点,你需要告诉Docker的唯一的事情就是把你的configuration文件添加到容器的tomcat conf文件夹中。
或者如果这是你必须篡改战争文件这是你可以做的:在你的生成机器上手动(或通过脚本)爆炸战争,而不是直接添加战争到docker图像,映射文件夹。 像这样的东西
ADD ./target/app-0.1.0.BUILD-SNAPSHOT / var / lib / jetty / webapps / ROOT。
然后手动将所有文件添加到所需的目标。
添加login.jsp / var / lib / jetty / webapps / ROOT / Webapps,等等。
如何在启动tomcat之前手动解压你的战争?
ADD my.war /tmp/my.war RUN unzip /tmp/my.war -d /usr/local/tomcat/webapps/mywar # Edit config files # Now you can start tomcat... CMD ["catalina.sh", "run"]
您可以使用运行命令来启动tomcat容器,然后立即停止它。 这将导致战争扩大,然后你可以继续修改configuration文件。
例如:
RUN Start_tomcat.sh && \ stop_tomcat.sh && \ edit_1_config_file.sh && \ edit_2_config_file.sh
注意:您需要执行一个运行命令中的所有步骤。 作为Docker构build将采取每个命令,并运行在上一个命令生成的图像和提交。 并且服务中断,取决于在先前的RUN命令中启动的服务将不起作用。
只需添加一个在后台启动服务器的RUN
指令,给它几秒钟然后退出,即
RUN bash -c "catalina.sh start; sleep 5; catalina.sh stop;"
您将需要足够长的时间来扩展战争文件。