Я использую официальную последнюю версию докера Tomcat image. Я создал файл Docker, чтобы использовать этот образ Tomcat и развернуть файлы войны непосредственно в веб-приложениях Tomcat. Когда я запускаю этот образ докера для запуска контейнера, приложение весенней загрузки не запускается, поскольку я не вижу журналов запуска приложений. Тот же файл войны при развертывании на локальном сервере Tomcat работает нормально, но только когда я использую sudo
для запуска команды catalina.sh run
.
Вот файл докера, который я использовал:
##### Use the official Tomcat base image
FROM tomcat:latest
##### Env variable for log path
ENV LOG_PATH=/usr/local/tomcat/logs
##### Copy the WAR file into the webapps directory
COPY service-2.1.6.war /usr/local/tomcat/webapps/
##### Create necessary directories for Tomcat web applications
RUN mv /usr/local/tomcat/webapps.dist/* /usr/local/tomcat/webapps/
##### Set the environment variable for the active Spring profile
#####ENV SPRING_PROFILES_ACTIVE=prod
##### Copy the tomcat-users.xml file to configure the manager users
COPY tomcat-users.xml /usr/local/tomcat/conf/tomcat-users.xml
COPY context.xml /usr/local/tomcat/webapps/manager/META-INF/context.xml
#####Install sudo
RUN apt-get update && apt-get install -y sudo
##### Start Tomcat with sudo
#####CMD ["sudo", "/usr/local/tomcat/bin/catalina.sh", "run"]
Журналы запуска Tomcat из докер-контейнера:
Журналы запуска Tomcat из локальной установки Tomcat:
Что здесь может быть не так или чего-то не хватает?
Потому что у тебя весенняя загрузка 2.4.5.
FROM tomcat:9.0.90-jdk11-temurin-jammy
COPY helloworld.war /usr/local/tomcat/webapps/helloworld.war
EXPOSE 8080
ENTRYPOINT []
CMD ["catalina.sh", "run"]
НЕ ИСПОЛЬЗУЙТЕ tomcat:latest
Старый ответ
Весенняя загрузка 3.3.x
FROM tomcat:10.1.25-jdk17-temurin-jammy
COPY service-2.1.6.war /usr/local/tomcat/webapps/service-2.1.6.war
EXPOSE 8080
ENTRYPOINT []
CMD ["catalina.sh", "run"]
sudo
RUN apt-get update && apt-get install -y sudo
sudo
для запуска tomcat, поскольку по умолчанию контейнер выполняет его под учетной записью root.CMD ["sudo", "/usr/local/tomcat/bin/catalina.sh", "run"]
Supported tags and respective Dockerfile links
-> 10.1.25-jdk21-temurin-jammy
10.1.25-jdk21-temurin-jammy
Строка 144 ~ Строка 149
EXPOSE 8080
ENTRYPOINT []
CMD ["catalina.sh", "run"]
(8) Скопируйте содержимое здесь в свой файл докеров.
docker build -t docker-helloworld:0.0.1 .
docker tag docker-helloworld:0.0.1 docker-helloworld:latest
docker run -it --rm -p 8080:8080 docker-helloworld
@Abhilash — проверьте среду хоста, версию Tomcat, версию JDK. Разница между версией Tomcat и версией JDK контейнера Tomcat, которую вы используете. Вы используете Spring Boot 2.4.5. Пожалуйста, подтвердите версию JDK, которую вы используете (разница между Host и Container). Моя война Spring Boot использует Spring Boot 3.3.0, JDK 17.
@Abhilash — измените файл Dockerfile, FROM tomcat:latest
-> FROM tomcat:9.0.90-jdk11-temurin-jammy
, Spring Boot 2.4.5 + Tomcat 9.0 + JDK 11.
Изображение tomcat:latest
: JDK — 21.0.3
, версия Tomcat — 10.1.25
. Я предполагаю, что Spring Boot 2.4.5 с Tomcat 10.1 + JDK 21 может быть несовместим.
У меня есть Spring Boot версии 2.4.5, созданный с использованием jdk17, а версия моего хоста Tomcat была 8.5.98. Теперь, когда я использовал ту же версию изображения tomcat, а именно 8.5.98-jre17-temurin, приложение начало работать. Не знаю, в чем была проблема с более ранними версиями.
Единственная информация, предоставленная в начале вопроса: (1) Spring Boot War, (2) Tomcat, (3) tomcat:latest
упомянуто в Docker. Кроме того, версия, используемая Spring Boot, и версия, используемая версией JDK, Host Tomcat и версия, используемая JDK, не содержали описания в вопросе. Только после того, как я дал ответ и предоставил картинку, я увидел по картинке, что версия Spring Boot — 2.4.5. Кроме этого, так называемая версия Local Tomcat и версия JDK проблем не вызывают, но соответствующей информации по-прежнему нет.
Другими словами, все описание проблемы говорит вам только о том, что Spring Boot 2.4.5 и образ используют tomcat:latest
, и нет никакой более подробной информации, кроме этой.
2.4.5
, созданная с использованием версии jdk17
, а я использовал образ tomcat:latest
, использующий jdk21.8.5.98-jre17-temurin
.9.0.90-jre17-temurin-jammy
, поскольку здесь также использовался JDK17.
Я выполнил вышеуказанные шаги, но проблема осталась прежней. Я обновил вопрос с помощью журналов Catalina, которые распечатываются при запуске.