2017-08-05 7 views
0

Je souhaite créer et exécuter mon application Web Java Maven dans un conteneur docker. J'ai essayé avec une commande suivante:Impossible de voir l'application Web Java Maven Tomcat-plugin dans le navigateur Web

docker run -it --name my_project -v "$PWD":/usr/src/my_project -w /usr/src/my_project maven:3.5.0-jdk-8 mvn clean install tomcat7:run 

correctement copie les ressources, exécutez Maven install clean (construction réussie) et exécuté avec tomcat7-maven-plugin qui est inclus dans mon pom.xml.

Tout fonctionne très bien et les journaux sont vraiment similaires pour construire et exécuter localement sur ma machine Windows:

Run info

Malheureusement sur un navigateur web il y a des informations « connexion refusée ».

Ce qui pourrait potentiellement causer le problème?: - mon application est spécifique à Windows et ne peut pas fonctionner sur Linux? - application est entièrement application et en cours d'exécution, mais quelque chose ne va pas avec la configuration du proxy ou le port n'est pas configuré?

Comment puis-je aller plus loin - étudier les journaux? Essayez de construire sur le conteneur docker windows?

P.S. Je vérifie l'adresse IP d'un conteneur avec l'application Kitematic pour Windows docker.

+0

Tout change si vous ajoutez le paramètre '-p 9998: 9998' à la commande' docker run'? – mgyongyosi

+0

@mgyongyosi 10 points pour Gryfiindor. Maintenant, l'url d'accès est disponible et visible. Je suis un peu plus loin - merci :) – gooornik07

Répondre

2

Peut-être trois problèmes. Une fois que votre utilisé -w au lieu de -v

docker run -it --name my_project -v "$PWD":/usr/src/my_project -w /usr/src/my_project maven:3.5.0-jdk-8 mvn clean install tomcat7:run 

Ce que je supposais une faute de frappe lors de la publication. Ensuite, vous n'avez pas publié le port sur votre machine

docker run -p 9998:9998 -it --name my_project -v "$PWD":/usr/src/my_project -w /usr/src/my_project maven:3.5.0-jdk-8 mvn clean install tomcat7:run 

Ceci mapper le port 9998 (côté droit) de votre conteneur au port 9998 sur votre ordinateur local. Troisième et dernier, votre journal INFO indique écoute . Ce n'est pas bien. Parce que cela signifie que votre guerre est à l'écoute du trafic généré à l'intérieur du conteneur uniquement et non de l'extérieur du conteneur. Vous devez configurer votre war pour qu'il écoute toutes les interfaces à l'intérieur du conteneur et bind doit être 0.0.0.0:9998

+0

Que voulez-vous dire par "trafic généré à l'intérieur du conteneur seulement"? Je voudrais que l'application soit construite localement avec docekr, mais en fait elle devrait avoir accès aux fichiers Windows locaux (en dehors du conteneur). Dois-je ajouter quelque chose au conteneur ou configurer quelque chose? – gooornik07

+1

L'écoute de localhost signifie que vous écoutez le contexte localhost. A l'intérieur d'une machine virtuelle, il s'agit d'une machine virtuelle. À l'intérieur, elle contient le conteneur lui-même. Donc, si votre a dans un terminal avec bash à l'intérieur de votre VM ou conteneur, localhost pointerait vers cela. De même, une application écoutant localhost ne répondra qu'à la demande provenant de ce contexte. C'est pourquoi vous devez toujours écouter '0.0.0.0'. A propos de besoin du système de fichiers dont vous auriez besoin pour utiliser un montage de volume. Regardez le drapeau '--volume' ou' -v' d'une commande d'exécution de docker –