在tomcat docker container

时间:2016-06-07 07:39:40

标签: java tomcat docker dockerfile

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

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

到目前为止,一切都按预期工作。它提取war文件并在容器内启动应用程序。

但现在我需要在“/ 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目录中现有的解压缩文件夹。

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

2 个答案:

答案 0 :(得分:1)

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

所以:

  1. 解压战争
  2. 进行子文件夹所需的所有修改。
  3. 重新拉链
  4. 重命名为.war
  5. 按照正常情况部署
  6. 我正在通过war脚本来操纵DockerFile。就我而言,它部署了Geoserver +将插件添加jars/WEB-INF/lib

    简而言之,解压缩如下: unzip geoserver-2.10.2.war -d geoserver_war/

    希望能帮到某人

答案 1 :(得分:0)

可以使用post脚本解决,该脚本可以使用nohup调用,然后调用tomcat run。

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

   #postscript.sh
   sleep 1000
   copy commands

创建一个使用nohup调用post脚本的启动脚本,然后调用tomcat run

 #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"]

希望这会有所帮助。