使用来自 Docker 的 tomcat 图像时自定义 catalina.sh

Having a custom catalina.sh when using a tomcat image from Docker

我目前正在使用 Docker 文件创建 Tomcat 6.0.44。它看起来像这样:

FROM tomcat:6.0.44-jre7

...

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

从 Docker 文件构建图像没问题,但是当我转到 运行 它时,出现以下错误:

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

知道如何解决这个问题吗?

我想做的是传入这个参数-DentityExpansionLimit=100000。有没有比 catalina.sh 更简单的方法?

任何 help/suggestions 将不胜感激。

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

我不知道您是否已经找到解决方案,但这是我的建议。如果我没理解错的话,您会希望为您的网络应用程序设置一个 Java VM 选项。此外,您尝试使用您自己的版本更改 catalina.sh 脚本,以便它在 运行 您的 webapp 时包含额外的 Java VM 选项。

我认为你不应该用你自己的图像来改变图像 catalina.sh。脚本 catalina.sh 查看环境变量。您可以设置环境变量 CATALINA_OPTS 来包含此设置。 (还有一个环境变量 JAVA_OPTS 但当您还想将这些 java 选项应用到其他一些 Tomcat-native 进程时应该使用它,例如停止进程和版本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.

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

  1. 使用 Tomcat 的标准 Docker 图像并只添加您的网络应用程序而不是您的自定义 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 选项强加到映像中,而不是依赖 运行 映像来正确设置环境变量。

这有意义吗?

大多数情况下,您将 shell 脚本复制到 docker 容器中,但忘记在脚本上设置可执行位。

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

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