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?
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é.
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.
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.
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"]