在tomcat docker容器中部署Java应用程序
我正在尝试将.war,.aar,.xml和.properties文件部署到tomcat docker容器。我在Dockerfile下面使用了基础tomcat docker镜像。在tomcat docker容器中部署Java应用程序
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作为基础镜像构建一个更多的Docker镜像,并将上述文件复制到容器内的目标文件夹中,但它会删除所有提取的war文件夹/文件,并且它只复制/ usr/local/tomcat中的文件/ webapps目录。
我只需要添加一些属性文件,它不应该删除webapps目录内现有的解压缩文件夹。
有人可以帮我解决这个问题吗?
可以通过使用可以使用nohup调用的后脚本然后调用tomcat运行来解决。
postscript.sh有post操作 - 将复制命令列表移动到postscript.sh在复制命令之前,在脚本中包含一些等待逻辑,直到tomcat启动。 (它可以只是睡了几秒钟,甚至用grep tomcat的日志,搜索服务器启动)
#postscript.sh
sleep 1000
copy commands
创建使用nohup的调用后脚本启动脚本,然后调用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"]
希望这有助于。
另一种选择是仅仅解压缩war
文件(您可以重命名为zip,因为它确实是zip文件)。
所以:
- 解压战争
- 做出必要的子文件夹中的所有修改。
- 重新拉链
- 重命名到.WAR
- 部署按正常
我经由DockerFile
脚本操纵war
。就我而言,它的Geoserver
部署+添加插件jars
到/WEB-INF/lib
,解压后是这样的: unzip geoserver-2.10.2.war -d geoserver_war/
希望帮助别人
更编程方法是来准备你的java应用程序,所以你可以用-D标志或类似的东西指向配置所在的位置。然后,您可以在复制war文件后将-D标志附加到CATALINA_OPTS变量 –
另一种方法是在启动服务器之前将属性构建到jar中并将其部署到tomcat/lib。 –
感谢您的建议。但我需要通过在docker中使用上述场景来完成此操作。 – Nanab4u