小编典典

使用来自Docker的tomcat映像时具有自定义catalina.sh

tomcat

我当前正在使用Dockerfile创建Tomcat 6.0.44。看起来像这样:

FROM tomcat:6.0.44-jre7

...

ADD catalina.sh /usr/local/tomcat/bin

从Dockerfile构建映像很好,但是当我运行它时,出现以下错误:

exec: "catalina.sh": executable file not found in $PATH.

关于如何解决这个问题的任何想法?

我想做的是传递此参数-DentityExpansionLimit=100000。有没有比在其中更简单的方法catalina.sh呢?

任何帮助/建议将不胜感激。

编辑:我正在EC2上运行Redhat实例,并使用Docker扩展了tomcat 6图像。


阅读 872

收藏
2020-06-16

共1个答案

小编典典

我不知道您是否已经找到解决方案,但这是我的建议。如果我对您的理解正确,则希望为Web应用程序设置Java
VM选项。另外,您尝试使用自己的版本更改catalina.sh脚本,以便在运行Web应用程序时它包含附加的Java VM选项。

我认为您不必自己更改图像catalina.sh。脚本catalina.sh查看环境变量。您可以将环境变量CATALINA_OPTS设置为包含此设置。(还有一个环境变量JAVA_OPTS,但是当您还希望将这些Java选项应用于某些其他Tomcat本地进程(例如,根据tomcat文档的stop进程和版本)时,应使用该变量。)

Tomcat的最新版本(9)catalina.sh明确指出:

Do not set the variables in this script. Instead put them into a script setenv.sh in CATALINA_BASE/bin to keep your customizations separate.

因此,您可以选择以下两个选项之一:

  1. 使用Tomcat的标准Docker映像,仅添加您的Web应用程序,而不添加自定义的catalina.sh。运行此映像的容器时,请将CATALINA_OPTS环境变量设置为的值-DentityExpansionLimit=100000

  2. 制作一个setenv.sh设置CATALINA_OPTS变量的脚本。还要将此脚本添加到构建文件中。版本6 catalina.sh在CATALINA_HOME和CATALINA_BASE文件夹中查找此脚本,并在存在的情况下执行该脚本。这样的事情(我没有测试)。

        #!/bin/sh  
    echo "Setting JVM option Entity Expansion limit for application"  
    export CATALINA_OPTS="-DentityExpansionLimit=100000"

选项2的优点是,您可以将正确的默认JVM选项强制放入映像中,而不是依靠运行映像的人员正确设置环境变量。

那有意义吗?

2020-06-16