我目前正在使用Dockerfile创建Tomcat 6.0.44。它看起来像这样:
FROM tomcat:6.0.44-jre7
...
ADD catalina.sh / usr / local / tomcat / bin
从Dockerfile构建映像很好,但是当我去运行它时,我收到以下错误:
exec:“catalina.sh”:$ PATH中找不到可执行文件。
如何解决这个问题?
我要做的是传递此参数“-DentityExpansionLimit = 100000”。有没有比catalina.sh更容易的方法呢?
非常感谢任何帮助/建议。
编辑: 我在EC2上运行Redhat实例,并使用Docker扩展tomcat 6映像。
答案 0 :(得分:2)
我不知道你是否已找到解决方案,但这是我的建议。如果我理解正确,您需要为您的webapp设置Java VM选项。此外,您尝试使用自己的版本更改catalina.sh脚本,以便在运行Web应用程序时包含其他Java VM选项。
我认为您不应该使用自己的catalina.sh
来改变图像。脚本catalina.sh查看环境变量。您可以将环境变量CATALINA_OPTS设置为包含此设置。 (还有一个环境变量JAVA_OPTS,但是当你还想根据tomcat文档将这些java选项应用于其他一些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.
因此,您可以选择以下两个选项之一:
使用Tomcat的标准Docker镜像,只添加您的webapp而不是自定义catalina.sh。运行此映像的容器时,将CATALINA_OPTS环境变量设置为-DentityExpansionLimit=100000
的值。
创建一个设置CATALINA_OPTS变量的setenv.sh
脚本。还要在构建文件中将此脚本添加到映像中。版本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选项强制插入到映像中,而不是依赖运行映像的人来正确设置环境变量。
这有意义吗?
答案 1 :(得分:1)
当您将shell脚本复制到docker容器但忘记在脚本上设置可执行位时,大多数情况都是如此。
在您的主机上确保执行chmod +x catalina.sh
,然后执行docker build
。
此外,我通常更喜欢在运行时使用卷覆盖这些文件。但这又取决于你的做法。原因是明天如果出现新版本的图像,那么您不需要重建dockerfiles。但这只是你可以使用官方图片