使用来自 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.
因此,您可以选择以下两个选项之一:
使用 Tomcat 的标准 Docker 图像并只添加您的网络应用程序而不是您的自定义 catalina.sh。当运行这个镜像的容器时,将CATALINA_OPTS环境变量设置为-DentityExpansionLimit=100000
的值。
创建一个 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 文件。但前提是你可以使用官方图片
我目前正在使用 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.
因此,您可以选择以下两个选项之一:
使用 Tomcat 的标准 Docker 图像并只添加您的网络应用程序而不是您的自定义 catalina.sh。当运行这个镜像的容器时,将CATALINA_OPTS环境变量设置为
-DentityExpansionLimit=100000
的值。创建一个
setenv.sh
脚本来设置 CATALINA_OPTS 变量。还将构建文件中的此脚本添加到图像中。版本 6catalina.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 文件。但前提是你可以使用官方图片