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:8080
und 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
10.0.75.x
keine externe Adresse und der Browser versucht, sie im Web zu finden?docker --version
, 2.docker run hello-world
, 3.docker run --detach --publish 8080:80 --name webserver nginx
, 4. Versuchen Sie dann, localhostlocalhost:8080
und es läuft ab.docker ps
zeigtCONTAINER 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
Antworten:
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
quelle
Von: https://docs.docker.com/docker-for-windows/networking/
Es sollte also über http: // localhost: 8080 zugänglich sein
Wenn das nicht funktioniert, probieren Sie das Windows-Beispiel aus
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:
Und verwenden Sie http: // [docker-machine-ip]: 80
quelle
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 seinDocker for Windows
mit / ohneLinux 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:
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 Windows
Lö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.
quelle
8080:8080
es das ist, was theoretisch funktionieren sollte, aber es funktioniert nicht. Ich weiß nichts über Networking. Wo soll ich anfangen zu suchen?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.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.
quelle