2015-03-22 22 views
36

Jestem całkiem nowym Tomcatiem i Dockerem - więc prawdopodobnie brakuje mi podstawki Tomcat gdzieś w tym pytaniu.Wdrażanie aplikacji webowej Java do Tomcat 8 działającej w kontenerze Docker

Co próbuję zrobić, to zbudować kontener Docker, który uruchamia usługę WWW SpringBoot, która po prostu zwraca niektóre statyczne dane. Wszystko działa w systemie OSX, więc używam również Boot2Docker.

Pisałem własne Dockerfile zbudować kontener, że moja aplikacja działa w:

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/ 

Ten Dockerfile działa dobrze i jestem w stanie uruchomić pojemnik z utworzonego obrazu.

docker build -t myapp . 

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

Ten kontener uruchamia się poprawnie i nie wyświetla błędów i wyświetla komunikat informujący o wdrożeniu mojej aplikacji.

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 

Kontener również poprawnie skopiował myapp.war do ścieżki opisanej w pliku Dockerfile. Co więcej, jestem w stanie przejść do domyślnej strony Tomcat, aby potwierdzić, że Tomcat jest uruchomiony, mogę również trafić wszystkie przykłady, itp.

Do problemu, kiedy nawiguję do http://192.168.59.103:8888/myapp/getData, otrzymuję 404. Nie mogę całkiem dowiedzieć się, dlaczego. Czy brakuje mi czegoś związanego z instalacją .war w Tomcat?

+0

Skąd czerpiesz ten adres IP? –

+0

To jest ten przypisany do mojej maszyny Boot2Docker VM. Uderzając w to IP: port bez/myapp wyświetla domyślną stronę Tomcat. – Chris

+0

Jestem facetem z Linuksa, więc zachowanie może się różnić, ale spróbuj odwiedzić localhost: 8080 zamiast tego. –

Odpowiedz

43

Próbujesz skopiować wojnę do podkatalogu poniżej aplikacji webowych, to źle. Plik wojenny należy skopiować prosto do folderu webapps.

Usuń polecenie mkdir, i zastąpić kopię tak:

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

Tomcat rozpakuje wojnę.

4

Tomcat wyodrębni wojnę skopiowaną tylko do katalogu webapp. Zmień DockerFile jak poniżej

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

Możecie mieć dostęp url jak poniżej, chyba że określono Webroot

http://192.168.59.103:8888/myapp/getData

4

Jest oneliner dla tego jednego.

można po prostu uruchomić,

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

Spowoduje to skopiowanie pliku wojny do katalogu webapps i dostać swoją aplikację uruchomiony w żadnym momencie.