Развертывание 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?
Ответы
Ответ 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"]