在tomcat docker容器中部署Java应用程序

我正在尝试将.war,.aar,.xml和.properties文件部署到tomcat docker容器。 我在Dockerfile下面使用了基础tomcat docker镜像。

FROM tomcat:7 RUN rm -rf /usr/local/tomcat/webapps/ROOT COPY test-3.0.war /usr/local/tomcat/webapps/ROOT.war COPY testone-3.0.aar /usr/local/tomcat/webapps/axis2/WEB-INF/services/ COPY ./conf/context.xml /usr/local/tomcat/conf/ COPY ./conf/server.xml /usr/local/tomcat/conf/ CMD ["catalina.sh", "run"] 

一切工作如预期一直到现在。 它提取战争文件并启动容器内的应用程序。

但现在我需要添加/编辑“/ usr / local / tomcat / webapps / ROOT / WEB-INF / classes /”和“/ usr / local / tomcat / webapps / ROOT / js”中的一些属性文件。

 COPY ./conf/applicationurl.properties /usr/local/tomcat/webapps/ROOT/WEBINF/classes/ COPY ./conf/memcache.properties /usr/local/tomcat/webapps/ROOT/WEB-INF/classes/ COPY ./conf/um.properties /usr/local/tomcat/webapps/ROOT/WEB-INF/classes/ COPY ./conf/pe.properties /usr/local/tomcat/webapps/ROOT/WEB-INF/classes/ COPY ./conf/check.js /usr/local/tomcat/webapps/ROOT/js 

将这些文件复制到正在运行的tomcat容器中的最佳方法是什么? 我试图用上面的Dockerfile作为基础镜像构build一个Docker镜像,并将上述文件复制到容器内的目标文件夹中,但是它删除了所有提取的war文件夹/文件,而且它只复制了/ usr / local / tomcat中的文件/ webapps目录。

我只需要添加一些属性文件,它不应该删除webapps目录中的现有提取的文件夹。

有人可以帮我解决这个问题吗?

另一个select是仅解压缩war文件(您可以重命名为zip,因为它确实是一个zip文件)。

所以:

  1. 解压战争
  2. 进行子文件夹所需的所有修改。
  3. 再压缩
  4. 重命名为.war
  5. 按照正常进行部署

我通过DockerFile脚本来操纵war 。 在我的情况下,它的部署Geoserver +添加插件jars /WEB-INF/lib

总之,像这样unzip geoserver-2.10.2.war -d geoserver_war/unzip geoserver-2.10.2.war -d geoserver_war/

希望能帮助别人

可以通过使用可以使用nohup调用的后脚本然后调用tomcat运行来解决。

postscript.sh具有post操作 – 将复制命令列表移动到postscript.sh在复制命令之前,在脚本中包含一些等待逻辑,等待tomcat启动。 (它可以只睡几秒钟,甚至grep tomcat日志search服务器启动)

  #postscript.sh sleep 1000 copy commands 

创build一个启动脚本,使用nohup调用post脚本,然后调用tomcat运行

  #start.sh nohup postscript.sh & catalina.sh run 

然后更改CMD以在dockerfile中运行start.sh。 同时将postscript.sh和start.sh文件复制到容器中的某个位置(例如/ tmp)。

  #....other contents COPY start.sh /tmp/start.sh COPY postscript.sh /tmp/postscript.sh CMD ["/tmp/start.sh"] 

希望这可以帮助。