web-dev-qa-db-fra.com

Déploiement de Java webapp sur Tomcat 8 exécuté dans le conteneur Docker

Tomcat et Docker étant relativement nouveaux, il me manque probablement un élément fondamental de Tomcat quelque part dans cette question.

Ce que j'essaie de faire est de créer un conteneur Docker qui exécute un service Web SpringBoot Restful qui ne renvoie que des données statiques. Tout cela tourne sous OSX, j'utilise donc également Boot2Docker.

J'ai écrit mon propre fichier Dockerfile pour construire le conteneur dans lequel mon application est exécutée:

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/

Ce fichier Dockerfile fonctionne correctement et je suis en mesure de démarrer le conteneur à partir de l'image créée.

docker build -t myapp .

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

Ce conteneur démarre correctement et ne génère aucune erreur et affiche le message indiquant que mon application a été déployée.

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

Le conteneur a également correctement copié le fichier myapp.war dans le chemin décrit dans le fichier Docker. De plus, je suis capable de naviguer vers la page par défaut de Tomcat pour confirmer que Tomcat est en cours d'exécution, je peux aussi cliquer sur tous les exemples, etc.

Au problème, quand je navigue vers http://192.168.59.103:8888/myapp/getData je reçois un 404. Je ne peux pas vraiment comprendre pourquoi. Me manque-t-il quelque chose concernant un déploiement .war sur Tomcat?

55
Chris

Vous essayez de copier le fichier war dans un répertoire situé sous webapps. Le fichier war doit être copié dans le répertoire webapps.

Supprimez la commande mkdir et copiez le fichier war comme suit:

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

Tomcat extraira la guerre si autodeploy est activé.

63
crazyman

Il y a une ligne pour celui-ci.

Vous pouvez simplement courir,

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

Cela va copier le fichier war dans le répertoire webapps et faire fonctionner votre application en un rien de temps.

17
Krishna Chaitanya

Tomcat extraira uniquement la guerre copiée dans le répertoire webapps. Changez Dockerfile comme ci-dessous:

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

Vous devrez peut-être accéder à l'URL ci-dessous à moins que vous n'ayez spécifié la racine Web.

http://192.168.59.103:8888/myapp/getData

8
Saril Sudhakaran

Vous pouvez essayer avec cet exemple:

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"]
0
Soeng Saravit