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

时间:2015-09-16 08:10:09

标签: tomcat docker tomcat6 catalina

我目前正在使用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映像。

2 个答案:

答案 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.

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

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

  2. 创建一个设置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"
    
  3. 选项2的优点是您可以将正确的默认JVM选项强制插入到映像中,而不是依赖运行映像的人来正确设置环境变量。

    这有意义吗?

答案 1 :(得分:1)

当您将shell脚本复制到docker容器但忘记在脚本上设置可执行位时,大多数情况都是如此。

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

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