Déploiement de Java webapp sur Tomcat 8 en cours d’exécution dans un conteneur Docker

Je suis un peu nouveau pour Tomcat et Docker – je manque donc probablement un élément fondamental 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 fonctionne sous OSX donc j’utilise également Boot2Docker.

J’ai écrit mon propre fichier Dockerfile pour créer le conteneur dans lequel mon application s’exécute:

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 capable 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 myapp.war est également correctement copié dans le chemin décrit dans le fichier Docker. De plus, je peux naviguer vers la page par défaut de Tomcat pour confirmer que Tomcat est en cours d’exécution, je peux également atteindre tous les exemples, etc.

Pour le problème, quand je navigue à http://192.168.59.103:8888/myapp/getData, je reçois un 404. Je ne peux pas vraiment comprendre pourquoi. Est-ce qu’il me manque quelque chose concernant un déploiement .war sur Tomcat?

Vous essayez de copier la guerre sur un sous-répertoire en dessous de webapps, c’est faux. Le fichier war doit être copié simplement dans le dossier webapps.

Supprimez la commande mkdir et remplacez la copie comme ceci:

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

Tomcat va extraire la guerre.

Il y a un oniner 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 copiera le fichier war dans le répertoire webapps et lancera votre application en un rien de temps.

Tomcat va extraire la guerre copiée dans le répertoire webapp uniquement. Changer 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, sauf si vous avez spécifié le site Web.

http://192.168.59.103:8888/myapp/getData