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"]
我正在使用 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"]