Подтвердить что ты не робот

Развертывание Java webapp для Tomcat 8, работающего в контейнере Docker

Я новичок в Tomcat и Docker, поэтому я, вероятно, вообще не замечаю Tomcat в этом вопросе.

Я пытаюсь создать контейнер Docker, который запускает веб-службу SpringBoot Restful, которая возвращает только статические данные. Все это работает на OSX, поэтому я также использую Boot2Docker.

Я написал свой собственный файл Docker для создания контейнера, в котором работает мое приложение:

FROM tomcat:8.0.20-jre8

RUN mkdir /usr/local/tomcat/webapps/myapp

COPY /1.0-SNAPSHOT/my-app-1.0-SNAPSHOT.war /usr/local/tomcat/webapps/myapp/

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

docker build -t myapp .

docker run -it --rm -p 8888:8080 myapp

Этот контейнер запускается правильно и не выдает никаких ошибок и отображает сообщение о том, что мое приложение было развернуто.

22-Mar-2015 23:07:21.217 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory 
Deploying web application directory /usr/local/tomcat/webapps/myapp

В контейнере также верно myapp.war, скопированный в путь, описанный в файле Docker. Кроме того, я могу перейти на страницу по умолчанию Tomcat, чтобы подтвердить, что Tomcat запущен, я также могу поразить все примеры и т.д.

К проблеме, когда я перехожу к http://192.168.59.103:8888/myapp/getData, я получаю 404. Я не могу понять, почему. Я что-то пропустил в отношении использования .war для Tomcat?

4b9b3361

Ответ 1

Вы пытаетесь скопировать файл war в каталог ниже webapps. Файл войны должен быть скопирован в каталог webapps.

Удалите команду mkdir и скопируйте файл war следующим образом:

COPY /1.0-SNAPSHOT/my-app-1.0-SNAPSHOT.war /usr/local/tomcat/webapps/myapp.war

Tomcat извлечет войну, если autodeploy.

Ответ 2

Для этого есть онлайнер.

Вы можете просто запустить,

docker run -v /1.0-SNAPSHOT/my-app-1.0-SNAPSHOT.war:/usr/local/tomcat/webapps/myapp.war -it -p 8080:8080 tomcat

Это скопирует файл войны в каталог webapps и мгновенно запустит ваше приложение.

Ответ 3

Tomcat будет извлекать только войну, которая копируется в каталог webapps. Измените Dockerfile как Dockerfile ниже:

FROM tomcat:8.0.20-jre8
COPY /1.0-SNAPSHOT/my-app-1.0-SNAPSHOT.war /usr/local/tomcat/webapps/myapp.war

Вам может потребоваться доступ к URL-адресу, указанному ниже, если вы не указали веб-сайт

http://192.168.59.103:8888/myapp/getData

Ответ 4

Вы можете попробовать с этим примером:

FROM tomcat:9.0.11-jre10

MAINTAINER saravit

RUN rm -rf /usr/local/tomcat/webapps/*

COPY ./ROOT.war /usr/local/tomcat/webapps/ROOT.war

CMD ["catalina.sh","run"]