Wildfly im Docker-Container startet nicht

10

Ich versuche, auf die Begrüßungsseite von Wildfly zuzugreifen, die auf einem Docker-Container in Windows 10 Pro ausgeführt wird. Das habe ich getan:

Bild gezogen:

docker pull jboss/wildfly

Führen Sie den Wildfly-Container aus (dies funktioniert einwandfrei. Im Wildfly-Protokoll kann ich sehen, dass er korrekt gestartet wurde):

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

Suchen Sie die Container-ID:

docker ps

Überprüfen Sie die IP-Adresse:

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

Die IP-Adresse lautet 172.17.0.2: In einem Browser gehe ich zu http://172.17.0.2:8080/, aber der Browser hängt und es tritt eine Zeitüberschreitung auf. Was vermisse ich?

AKTUALISIEREN

Ich habe es auch mit versucht 127.0.0.1:8080und es funktioniert auch nicht

UPDATE2

Konsolenprotokoll:

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
quelle
Lesen Sie die Antwort stackoverflow.com/a/43762751/7873775 und versuchen Sie es mit 10.0.75.1:8080 und 10.0.75.2:8080.
Evgeniy Khyst
Entschuldigung, aber das hat nicht funktioniert. Ich habe sowohl Docker als auch Browser auf demselben Windows 10-Computer ausgeführt. Ist dies 10.0.75.xkeine externe Adresse und der Browser versucht, sie im Web zu finden?
ps0604
1
OK, versuchen wir das Problem zu finden. Bitte posten Sie die Ergebnisse der folgenden CLI-Befehle: 1. docker --version, 2. docker run hello-world, 3. docker run --detach --publish 8080:80 --name webserver nginx, 4. Versuchen Sie dann, localhost
Evgeniy Khyst
Siehe Frage, die mit dem Konsolenprotokoll aktualisiert wurde. Ich habe es versucht localhost:8080und es läuft ab. docker pszeigtCONTAINER 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 Ich habe diesen Artikel gefunden , der über Docker-Networking spricht. Es heißt, dass der Server, der im Container ausgeführt wird, alle Schnittstellen abhören muss (der letzte Teil des Artikels). Gilt dies?
ps0604

Antworten:

3

Wenn Sie einen Container erstellen, veröffentlicht er standardmäßig keinen seiner Ports für die Außenwelt. Das Netzwerk 172.17.XX ist intern. Wenn Sie die IP-Adresse an die Host-IP binden müssen, führen Sie den Docker-Container mit dem Flag -p wie folgt aus:

-p 8080: 8080

Ordnen Sie den TCP-Port 8080 im Container dem Port 8080 auf dem Docker-Host zu

Ivan Vovk
quelle
Warum funktioniert dieses Beispiel , wenn die Ports nicht für die Außenwelt veröffentlicht werden?
ps0604
@Will Sie die Antwort falsch bearbeitet haben, wenn Sie sich die Frage ansehen, ist es genau das, was ich getan habe.
ps0604
@ ps0604 klingt wie ein Netzwerkproblem. In Ihrem Fall überprüfen Sie die Firewall-Regeln
Ivan Vovk
Ihre Antwort war also falsch?
ps0604
Meine Antwort ist richtig, da sie auf Dokumentationsempfehlungen basiert.
Ivan Vovk
3

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

Die Portweiterleitung funktioniert für localhost. --publish, -p oder -P funktionieren alle. Von Linux aus exponierte Ports werden an den Host weitergeleitet.

Es sollte also über http: // localhost: 8080 zugänglich sein


Wenn das nicht funktioniert, probieren Sie das Windows-Beispiel aus

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

Welches sollte zugänglich sein http: // localhost: 80

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


Wenn auch das fehlschlägt, versuchen Sie:

docker-machine ip default

Und verwenden Sie http: // [docker-machine-ip]: 80

Tyhal
quelle
1
es funktioniert nicht in localhost: 8080, sorry
ps0604
Könnten Sie das oben veröffentlichte Beispiel ausprobieren, um festzustellen, ob es sich um ein Problem mit jboss / wildfly handelt oder ob es sich um Ihr Windows-Netzwerk handelt?
Tyhal
Und wenn nginx nicht funktioniert, können Sie 'docker-machine ip default' ausführen und versuchen, die IP dort anstelle von localhost zu verwenden
Tyhal
0

Die wichtigsten Informationen sind Docker container in Windows 10 Pro: Dies ist eine sehr allgemeine Spezifikation, wie Ihr Docker unter Windows funktioniert. Es kann viele Möglichkeiten zB sein Docker for Windowsmit / ohne Linux containers, Docker toolbox, Remote - Instanz, ....

Im Allgemeinen werden Docker-Container unter Windows normalerweise in einer Art virtueller Maschine (Hyper-V, Virtualbox, ...) ausgeführt. Es gibt also eine zusätzliche Netzwerkschicht, auf die möglicherweise nicht direkt über Ihren Windows-Netzwerk-Namespace zugegriffen werden kann. Das verknüpfte Beispiel wird jedoch auf einem Linux-Computer ausgeführt, auf dem diese zusätzliche Netzwerkschicht nicht vorhanden ist. Und das ist ein Grund, warum das Kopieren / Einfügen eines Linux-Beispiels unter Windows nicht funktioniert. Führen Sie den Container wie gewohnt aus und legen Sie Port 8080 frei:

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

Die IP für den Zugriff ist jedoch unterschiedlich und die Container-IP kann nicht verwendet werden, da auf dieses interne Docker-Netzwerk sehr wahrscheinlich nicht von Windows aus zugegriffen werden kann. Versuchen Sie lieber, die IP Ihres Windows-Betriebssystems zu verwenden. Überprüfen Sie schließlich die Dokumentation der verwendeten Docker on WindowsLösung und finden Sie heraus, welche IP für exponierte Ports verwendet wird.

Wenn Sie über fortgeschrittene Windows- / Linux-Netzwerkkenntnisse verfügen, können Sie den Port vom Containernetzwerk-Namespace über die Zwischen-VM-Netzwerkschicht zur Windows-Netzwerkschicht weiterleiten. Aber es kann ziemlich kompliziert sein.

Jan Garaj
quelle
Jan, ich habe Docker Desktop für Windows installiert , das Image heruntergeladen und den Wildfly-Container ausgeführt, wie im obigen Tutorial erläutert. In der Konsole sehe ich, dass es gut beginnt und 8080:8080es das ist, was theoretisch funktionieren sollte, aber es funktioniert nicht. Ich weiß nichts über Networking. Wo soll ich anfangen zu suchen?
ps0604
@ ps0604 Wenn Sie dem Linux-Tutorial blind folgen möchten, verwenden Sie Linux. Wie ich bereits erwähnt habe, ist doc Ihr Freund - docs.docker.com/docker-for-windows/networking wird dort ausdrücklich erwähnt 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.. Bitte beschäftigen Sie sich mit dieser Einschränkung.
Jan Garaj
0

Ich hatte einen Kollegen, der an einem Windows-System arbeitete, bei dem das gleiche Problem auftrat. Er gab sich viel Mühe und kam einfach nicht weiter. Es gibt eine Menge seltsamer Dinge, die anscheinend mit Docker Desktop für Windows passieren. Wir haben endlich das Linux-Subsystem für Windows installiert und dort Docker installiert, und von da an hat es für ihn wie ein Zauber funktioniert. Wenn Sie sich an Windows halten möchten und nichts dagegen haben, am Linux-Subsystem zu arbeiten, empfehle ich Ihnen, diesen Weg zu gehen. Wir gingen weiter als von Jan Garaj vorgeschlagen und fanden es einfach Zeitverschwendung. Docker Desktop für Windows ist als Umgebung gedacht, in der Sie vollständig darin arbeiten - mit Entwicklungscontainern usw. Host-Container-Inhalte sind ein Problem.

Sam Thomas
quelle
Ja, ich stimme zu, ich werde die Container in Ubuntu anstelle von Windows erstellen, ich habe dort keine Probleme. Das einzige ist, dass ich in Windows entwickle, also müsste ich dreimal testen, einmal in Windows während der Entwicklung, dann im Linux-Container und schließlich, wenn ich den Container in die Cloud hochlade. Wenn ich den Container unter Windows ausführen kann, würde ich ihn nur zweimal testen.
ps0604
Aus diesem Grund habe ich das Linux-Subsystem vorgeschlagen. Sie müssen den Kontext nicht dreimal ändern, vielleicht 2-2,5 Mal.)
Sam Thomas