在使用Docker的tomcat镜像时有一个自定义的catalina.sh

我目前正在使用Dockerfile来创buildTomcat 6.0.44。 它看起来像这样:

从tomcat:6.0.44-jre7

添加catalina.sh / usr / local / tomcat / bin

从Dockerfile构build图像是好的,但是当我去运行它时,我得到以下错误:

exec:“catalina.sh”:$ PATH中找不到可执行文件。

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

我想要做的是通过这个参数“-DentityExpansionLimit = 100000”。 有没有比catalina.sh更容易的方法呢?

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

编辑:我在EC2上运行一个Redhat实例,并使用Docker来扩展一个tomcat 6映像。

我不知道你是否已经find了解决办法,但这是我的build议。 如果我正确地理解了你,你会想为你的web应用程序设置一个Java VM选项。 此外,您还尝试使用您自己的版本更改catalina.sh脚本,以便在运行webapp时包含额外的Java VM选项。

我想你不应该改变你自己的catalina.sh图像。 脚本catalina.sh查看环境variables。 您可以将环境variablesCATALINA_OPTS设置为包含此设置。 (还有一个环境variablesJAVA_OPTS,但是当你也想把这些java选项应用到其他一些Tomcat本地进程,如根据tomcat文档的停止进程和版本时,应该使用它。)

最新版本的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.

所以,你可以select两个选项之一:

  1. 使用Tomcat的标准Docker镜像,只添加你的webapp而不是你自定义的catalina.sh。 运行此映像的容器时,请将CATALINA_OPTS环境variables设置为-DentityExpansionLimit=100000的值。

  2. 制作一个设置CATALINA_OPTSvariables的setenv.sh脚本。 还要将此脚本添加到您的构build文件中。 版本6 catalina.sh在CATALINA_HOME和CATALINA_BASE文件夹中查找该脚本,如果存在,则执行该脚本。 像这样(我没有testing)。

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

选项2的优点是可以将正确的默认JVM选项强制到映像中,而不是依赖运行映像的人员正确设置环境variables。

那有意义吗?

当您将一个shell脚本复制到docker容器中时,大部分情况是这样,但忘记在脚本上设置可执行位。

在你的主机上,确保你执行chmod +x catalina.sh ,然后执行docker build

另外我通常更喜欢在运行时使用卷覆盖这些文件。 但是,这又取决于你的方法。 原因是明天,如果出现新版本的图像,那么你不需要重build你的dockerfiles。 但是,只有你可以使用官方的图像

Interesting Posts