Наличие собственного 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.

Итак, вы можете выбрать один из двух вариантов:

  1. Используйте стандартный образ Docker Tomcat и добавьте только свое веб-приложение, а не свой собственный 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 по умолчанию в образе, вместо того чтобы полагаться на людей, запускающих образ, для правильной установки переменной среды.

Имеет ли это смысл?

Это в основном тот случай, когда вы копируете сценарий оболочки внутри контейнера Docker, но забыли установить исполняемый бит в сценарии.

На хост-компьютере убедитесь, что вы выполните chmod +x catalina.sh а затем сделать docker build,

Также я обычно предпочитаю переопределять эти файлы, используя тома во время выполнения. Но опять же, это зависит от вашего подхода. Причина в том, что завтра, если появится новая версия образа, вам не нужно перестраивать ваши докер-файлы. Но это только если вы могли бы использовать официальные изображения

Другие вопросы по тегам