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;" 

您将需要足够长的时间来扩展战争文件。