Наличие собственного catalina.sh при использовании образа tom cat из Docker
В настоящее время я использую Dockerfile для создания Tomcat 6.0.44. Это выглядит так:
ОТ кота: 6.0.44-jre7
...
ДОБАВИТЬ catalina.sh /usr/local/tomcat/bin
Сборка образа из Dockerfile - это хорошо, но когда я запускаю его, я получаю следующую ошибку:
exec: "catalina.sh": исполняемый файл не найден в $PATH.
Есть идеи, как это исправить?
То, что я пытаюсь сделать, это передать этот параметр "-DentityExpansionLimit=100000". Есть ли более простой способ сделать это, чем в catalina.sh?
Любая помощь / предложения будут с благодарностью.
РЕДАКТИРОВАТЬ: я запускаю экземпляр Redhat на EC2 и использую Docker для расширения образа Tomcat 6.
2 ответа
Я не знаю, нашли ли вы решение, но вот мое предложение. Если я вас правильно понимаю, вы захотите установить опцию Java VM для своего веб-приложения. Кроме того, вы пытаетесь изменить скрипт catalina.sh своей собственной версией, чтобы он содержал дополнительную опцию Java VM при запуске вашего веб-приложения.
Я думаю, что вы не должны изменять изображение с вашим собственным catalina.sh
, Скрипт catalina.sh просматривает переменные окружения. Вы можете установить переменную окружения CATALINA_OPTS, чтобы содержать этот параметр. (Существует также переменная окружения JAVA_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.
Итак, вы можете выбрать один из двух вариантов:
Используйте стандартный образ Docker Tomcat и добавьте только свое веб-приложение, а не свой собственный 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 по умолчанию в образе, вместо того чтобы полагаться на людей, запускающих образ, для правильной установки переменной среды.
Имеет ли это смысл?
Это в основном тот случай, когда вы копируете сценарий оболочки внутри контейнера Docker, но забыли установить исполняемый бит в сценарии.
На хост-компьютере убедитесь, что вы выполните chmod +x catalina.sh
а затем сделать docker build
,
Также я обычно предпочитаю переопределять эти файлы, используя тома во время выполнения. Но опять же, это зависит от вашего подхода. Причина в том, что завтра, если появится новая версия образа, вам не нужно перестраивать ваши докер-файлы. Но это только если вы могли бы использовать официальные изображения