Docker tomcat编辑扩展的war文件

时间:2015-06-10 15:36:49

标签: java tomcat docker 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中的几个配置文件。我真的不想解压缩并重新打包war文件,因为这看起来很麻烦,难以维护。

我希望能告诉tomcat扩展war作为RUN步骤的一部分,然后使用ADD放入我的自定义文件,但我似乎无法找到一种方法来做到这一点。只有在CMD执行时才会扩展战争,然后我无法编辑文件。

4 个答案:

答案 0 :(得分:4)

我不确定你是如何用docker或其他任何东西实现它的,因为我还没有看到要求tomcat在实际开始之前扩展战争。但按照标准做法,爆炸战争和调整内容并不是一个好主意。它杀死了制造战争的全部目的。

而是应该对应用程序进行更改以从<<读取配置TOMCAT_HOME>> / conf。

如果你实现了这一点,你唯一需要告诉Docker的是将你的配置文件添加到容器tomcat conf文件夹中。

或者如果您必须篡改war文件,这就是您可以做的: 在构建计算机上手动(或通过脚本)分解战争,而不是直接将战争添加到docker镜像,映射文件夹。 像这样的东西

ADD ./target/app-0.1.0.BUILD-SNAPSHOT / var / lib / jetty / webapps / ROOT。

然后手动将所有文件添加到所需目的地。

添加login.jsp / var / lib / jetty / webapps / ROOT / Webapps,依此类推。

答案 1 :(得分:2)

如何在启动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"]

答案 2 :(得分:1)

只需添加RUN指令即可在后台启动服务器,然后退出几秒钟即可退出。

RUN bash -c "catalina.sh start; sleep 5; catalina.sh stop;"

你需要给它足够长的时间来扩展war文件。

答案 3 :(得分:0)

您可以使用Run命令启动tomcat容器,然后立即停止它。这将导致战争扩大,然后你可以继续修改配置文件。

例如:

$routeParams.program = "someValue";
$location.path('/myapp/' + $routeParams.program);

注意:您需要在一个运行命令中执行所有步骤。由于Docker构建将获取每个命令并在从上一个命令生成的映像上运行并提交。并且取决于在先前的RUN命令中启动的服务的服务将不起作用。