Docker tomcat 编辑展开的 war 个文件

Docker tomcat edit expanded war files

我正在使用 docker 部署 tomcat 容器 运行 第三方 war 文件。

我的 Dockerfile 看起来像这样

FROM tomcat:7-jre8

ADD my.war ${CATALINA_HOME}/webapps/my.war 

当我 运行 容器 tomcat 在 运行 扩展我的 war 时,我可以在 http://my.ip.addr:8080/mywar/.[=24 愉快地访问我的应用程序=]

但是我的问题是我想编辑 war 中的几个配置文件。我真的不想解压并重新打包 war 文件,因为它看起来很乱而且难以维护。

我希望能够告诉 tomcat 扩展 war 作为我 RUN 步骤的一部分,然后使用 ADD 放入我的自定义文件但我似乎无法找到这样做的方法。 war 仅在 CMD 执行时展开,之后我无法编辑文件。

您可以使用 运行 命令启动 tomcat 容器,然后立即停止它。这将导致 war 展开,然后您可以继续修改配置文件。

例如:

RUN Start_tomcat.sh && \
    stop_tomcat.sh && \
    edit_1_config_file.sh && \
    edit_2_config_file.sh

注意:您需要在一个 运行 命令中完成所有步骤。因为 Docker build 将接受每个命令,并且 运行 它在前一个命令生成的图像上并提交。并且在服务的情况下,取决于在之前的 运行 命令中启动的服务将不起作用。

我不确定您将如何使用 docker 或其他任何方式实现它,因为我无论如何都看不到要求 tomcat 在它实际开始之前扩展 war .但是按照标准做法,分解 war 并调整内容并不是一个好主意。它扼杀了制作 war.

的全部目的

您应该更改应用程序以从 << TOMCAT_HOME >>/conf.

读取配置

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

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

添加 ./target/app-0.1.0.BUILD-快照 /var/lib/jetty/webapps/ROOT.

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

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

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

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

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

如何在开始 tomcat 之前手动解压您的 war?

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