Wildfly dans le conteneur Docker ne démarre pas

10

J'essaie d'accéder à la page d'accueil de Wildfly fonctionnant sur un conteneur Docker dans Windows 10 Pro. C'est ce que j'ai fait:

Tiré l'image:

docker pull jboss/wildfly

Exécutez le conteneur Wildfly (cela fonctionne bien, dans le journal Wildfly, je peux voir qu'il a démarré correctement):

docker run -it -p 8080:8080 jboss/wildfly

Trouvez l'ID du conteneur:

docker ps

Inspectez l'adresse IP:

docker inspect -f "{{ .NetworkSettings.IPAddress }}" cac63ed21d78

L'adresse IP est 172.17.0.2, dans un navigateur, je vais sur http://172.17.0.2:8080/ mais le navigateur se bloque et expire. Qu'est-ce que je rate?

MISE À JOUR

J'ai aussi essayé avec 127.0.0.1:8080et ça ne marche pas non plus

UPDATE2

Journal de la console:

docker --version

#Docker version 19.03.1, build 74b1e89e8a

docker run hello-world

#Hello from Docker!

docker run --detach --publish 8080:80 --name webserver nginx

#Unable to find image 'nginx:latest' locally
#latest: Pulling from library/nginx
#8ec398bc0356: Pull complete
#465560073b6f: Pull complete
#f473f9fd0a8c: Pull complete
#Digest:  sha256:b2d89d0a210398b4d1120b3e3a7672c16a4ba09c2c4a0395f18b9f7999b768f2
#Status: Downloaded newer image for nginx:latest
#c5cdb6de11240b5fe33bc424779721e1b44948797fd6ff389004d0766b71dd17

docker ps

#CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES c5cdb6de1124 
#nginx "nginx -g 'daemon of" 10 minutes ago Up 10 minutes 0.0.0.0:8080->80/tcp webserver
ps0604
la source
Voir la réponse stackoverflow.com/a/43762751/7873775 et essayez 10.0.75.1:8080 et 10.0.75.2:8080.
Evgeniy Khyst
Désolé, mais cela n'a pas fonctionné. J'ai à la fois Docker et le navigateur exécutés sur la même machine Windows 10. N'est-ce pas 10.0.75.xune adresse externe et le navigateur essaie de la trouver sur le Web?
ps0604
1
OK, essayons de trouver le problème. Veuillez publier les résultats des commandes CLI suivantes: 1. docker --version, 2. docker run hello-world, 3. docker run --detach --publish 8080:80 --name webserver nginx, 4. puis essayez d'ouvrir localhost: 8080
Evgeniy Khyst
Veuillez voir la question mise à jour avec le journal de la console. J'ai essayé localhost:8080et ça expire. docker psspectaclesCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES c5cdb6de1124 nginx "nginx -g 'daemon of" 10 minutes ago Up 10 minutes 0.0.0.0:8080->80/tcp webserver
ps0604
@Evgeniy Khyst J'ai trouvé cet article qui parle de mise en réseau de dockers. Il dit que le serveur fonctionnant à l'intérieur du conteneur doit écouter toutes les interfaces (la dernière partie de l'article), cela s'applique-t-il?
ps0604

Réponses:

3

Par défaut, lorsque vous créez un conteneur, il ne publie aucun de ses ports dans le monde extérieur. Le réseau 172.17.XX est interne. Si vous avez besoin de lier l'adresse IP à l'hôte ip run docker container avec l'option -p, comme ça:

-p 8080: 8080

Mappez le port TCP 8080 du conteneur au port 8080 sur l'hôte Docker

Ivan Vovk
la source
Pourquoi cet exemple fonctionne-t-il si les ports ne sont pas publiés dans le monde extérieur?
ps0604
@Si vous avez mal édité la réponse, si vous jetez un œil à la question, c'est exactement ce que je faisais.
ps0604
@ ps0604 semble qu'il y ait un problème de réseau. Dans votre cas, vérifiez les règles du pare-feu
Ivan Vovk
Votre réponse était donc incorrecte?
ps0604
Ma réponse est correcte, car elle est basée sur une recommandation de documentation.
Ivan Vovk
3

De: https://docs.docker.com/docker-for-windows/networking/

La redirection de port fonctionne pour localhost; --publier, -p ou -P tous les travaux. Les ports exposés à partir de Linux sont transmis à l'hôte.

Il devrait donc être accessible à partir de http: // localhost: 8080


Si cela ne fonctionne pas, essayez l'exemple Windows

docker run -d -p 80:80 --name webserver nginx

Qui devrait être accessible http: // localhost: 80

https://docs.docker.com/docker-for-windows/index#explore-the-application-and-run-examples


Si même cela échoue, essayez:

docker-machine ip default

Et utilisez http: // [docker-machine-ip]: 80

Tyhal
la source
1
cela ne fonctionne pas dans localhost: 8080, désolé
ps0604
Pourriez-vous essayer l'exemple que j'ai posté ci-dessus pour voir si c'est un problème avec jboss / wildfly ou si c'est votre réseau Windows?
Tyhal
Et si nginx ne fonctionne pas, vous pouvez exécuter 'docker-machine ip default' et essayer d'utiliser l'adresse IP au lieu de localhost
Tyhal
0

Les informations clés sont les suivantes Docker container in Windows 10 Pro: il s'agit d'une spécification très générique sur le fonctionnement de votre Docker sous Windows. Il peut y avoir beaucoup d' options , par exemple Docker for Windowsavec / sans Linux containers, Docker toolbox, par exemple à distance, ....

Généralement, les conteneurs Docker sous Windows fonctionnent sur une sorte de machine virtuelle (Hyper-V, Virtualbox, ...). Il existe donc une couche réseau supplémentaire, qui peut ne pas être accessible directement à partir de votre espace de noms de réseau Windows. Mais l' exemple lié s'exécute sur une machine Linux, où cette couche réseau supplémentaire n'existe pas. Et c'est une raison pour laquelle l'exemple Linux copier / coller ne fonctionne pas sous Windows. Exécutez donc le conteneur comme d'habitude et exposez le port 8080:

docker run -it -p 8080:8080 jboss/wildfly

Mais l'IP d'accès sera différent et l'IP du conteneur ne peut pas être utilisée, car ce réseau de docker interne n'est probablement pas accessible à partir de Windows. Essayez plutôt d'utiliser l'IP de votre système d'exploitation Windows. Vérifiez éventuellement la documentation de la Docker on Windowssolution utilisée et trouvez l'IP utilisée pour les ports exposés.

Si vous avez des compétences avancées de mise en réseau Windows / Linux, vous pouvez en quelque sorte router / transférer le port de l'espace de noms du réseau de conteneurs, via la couche réseau VM intermédiaire vers la couche réseau Windows. Mais cela peut être assez compliqué.

Jan Garaj
la source
Jan, j'ai installé Docker Desktop pour Windows , téléchargé l'image et exécuté le conteneur Wildfly comme expliqué dans le tutoriel ci-dessus. Dans la console, je vois que ça démarre bien, et 8080:8080c'est ce qui en théorie devrait fonctionner, mais ce n'est pas le cas. Je ne connais pas le réseautage, où dois-je commencer à chercher?
ps0604
@ ps0604 Si vous souhaitez suivre aveuglément le didacticiel Linux, utilisez Linux. Comme je l'ai mentionné, doc est votre ami - docs.docker.com/docker-for-windows/networking, il est explicitement mentionné There is no docker0 bridge on Windows: Because of the way networking is implemented in Docker Desktop for Windows, you cannot see a docker0 interface on the host. This interface is actually within the virtual machine.. Veuillez gérer cette limitation.
Jan Garaj
0

J'avais un pair travaillant sur un système Windows qui rencontrait le même problème. Il y a mis beaucoup d'efforts et n'a pu aller nulle part. Il semble que beaucoup de choses étranges se produisent avec Docker Desktop pour Windows. Nous venons enfin d'installer le sous-système Linux pour Windows et d'y installer Docker et cela a fonctionné comme un charme pour lui à partir de ce moment. Si vous souhaitez vous en tenir à Windows et que cela ne vous dérange pas de travailler sur le sous-système Linux, je vous suggère de suivre cette voie. Nous sommes allés plus loin que ce que Jan Garaj a suggéré et nous avons trouvé que c'était une perte de temps. Docker Desktop pour Windows est censé être un environnement où vous travaillez complètement à l'intérieur - en utilisant des conteneurs de développement, etc. Les éléments Host-Container sont pénibles.

Sam Thomas
la source
Oui, je suis d'accord, je vais créer les conteneurs dans Ubuntu au lieu de Windows, je n'y ai aucun problème. La seule chose est que je développe sous Windows, donc je devrais tester trois fois, une fois dans Windows pendant le développement, puis dans le conteneur Linux, et enfin lorsque je télécharge le conteneur dans le cloud. Si je peux exécuter le conteneur sous Windows, je ne testerais que deux fois.
ps0604
c'est pourquoi j'ai suggéré le sous-système linux .. vous n'avez pas réellement à changer de contexte 3 fois, peut-être 2 à 2,5 fois;)
Sam Thomas