在使用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两个选项之一:
-
使用Tomcat的标准Docker镜像,只添加你的webapp而不是你自定义的catalina.sh。 运行此映像的容器时,请将CATALINA_OPTS环境variables设置为
-DentityExpansionLimit=100000
的值。 -
制作一个设置CATALINA_OPTSvariables的
setenv.sh
脚本。 还要将此脚本添加到您的构build文件中。 版本6catalina.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。 但是,只有你可以使用官方的图像