TL; DR Überprüfen Sie den Netzwerkmodus Ihres VirtualBox-Hosts. Dies sollte der Fall sein, bridged
wenn Sie möchten, dass auf die virtuelle Maschine (und den von ihr gehosteten Docker-Container) in Ihrem lokalen Netzwerk zugegriffen werden kann.
Es klingt so, als ob Ihre Verwirrung darin liegt, zu welchem Host Sie eine Verbindung herstellen müssen, um über HTTP auf Ihre Anwendung zuzugreifen. Sie haben Ihre Konfiguration nicht wirklich dargelegt - ich werde einige Vermutungen anstellen, basierend auf der Tatsache, dass Ihre Tags "Windows" und "VirtualBox" enthalten.
Ich vermute, dass Docker unter Linux in VirtualBox auf einem Windows-Host ausgeführt wird. Ich werde die IP-Adressen wie folgt kennzeichnen:
D
= die IP-Adresse des Docker-Containers
L
= die IP-Adresse des Linux-Hosts, der in VirtualBox ausgeführt wird
W
= die IP-Adresse des Windows-Hosts
Wenn Sie Ihre Go-Anwendung auf Ihrem Windows-Host ausführen, können Sie http://W:8080/
von überall in Ihrem lokalen Netzwerk eine Verbindung herstellen. Dies funktioniert, weil die Go-Anwendung den Port 8080 auf dem Windows-Computer bindet und jeder, der versucht, unter der IP-Adresse auf Port 8080 zuzugreifen W
, eine Verbindung herstellt.
Und hier wird es komplizierter:
VirtualBox kann beim Einrichten einer virtuellen Maschine (VM) das Netzwerk in einem von mehreren verschiedenen Modi konfigurieren. Ich erinnere mich nicht an die verschiedenen Optionen, aber die, die Sie wollen, ist bridged
. In diesem Modus verbindet VirtualBox die virtuelle Maschine mit Ihrem lokalen Netzwerk, als wäre sie eine eigenständige Maschine im Netzwerk, genau wie jede andere Maschine, die an Ihr Netzwerk angeschlossen war. Im bridged
Modus wird die virtuelle Maschine wie jede andere Maschine in Ihrem Netzwerk angezeigt. Andere Modi richten die Einstellungen anders ein und der Computer ist in Ihrem Netzwerk nicht sichtbar.
Vorausgesetzt, Sie haben das Netzwerk für den Linux-Host ( bridged
) korrekt eingerichtet , hat der Linux-Host eine IP-Adresse in Ihrem lokalen Netzwerk (etwa 192.168.0.x) und Sie können auf Ihren Docker-Container unter zugreifen http://L:8080/
.
Wenn der Linux-Host auf einen anderen Modus als eingestellt ist bridged
, können Sie möglicherweise vom Windows-Host aus darauf zugreifen. Dies hängt jedoch davon ab, in welchem Modus er sich befindet.
BEARBEITEN - basierend auf den Kommentaren unten klingt es sehr nach der Situation, die ich oben beschrieben habe, richtig ist.
Lassen Sie uns ein wenig zurücktreten: So funktioniert Docker auf meinem Computer (Ubuntu Linux).
Stellen Sie sich vor, ich führe denselben Befehl aus, den Sie haben : docker run -p 8080:8080 dockertest
. Dadurch wird ein neuer Container basierend auf dem dockertest
Image gestartet und Port 8080 auf dem Linux-Host (mein PC) an Port 8080 auf dem Container weitergeleitet (verbunden). Docker richtet ein eigenes internes Netzwerk (mit eigenen IP-Adressen) ein, damit der Docker-Dämon kommunizieren und Container miteinander kommunizieren können. Im Grunde genommen verbinden Sie damit -p 8080:8080
das interne Netzwerk von Docker mit dem "externen" Netzwerk - dh. der Netzwerkadapter des Hosts - an einem bestimmten Port.
Bis jetzt bei mir? OK, jetzt machen wir einen Schritt zurück und schauen uns Ihr System an. Auf Ihrem Computer wird Windows ausgeführt. Docker wird (derzeit) nicht unter Windows ausgeführt. Daher hat das von Ihnen verwendete Tool einen Linux-Host in einer virtuellen VirtualBox-Maschine eingerichtet. Wenn Sie dies docker run
in Ihrer Umgebung tun, geschieht genau das Gleiche: Port 8080 auf dem Linux-Host ist mit Port 8080 auf dem Container verbunden. Der große Unterschied besteht darin, dass Ihr Windows-Host nicht der Linux-Host ist, auf dem der Container ausgeführt wird. Daher gibt es hier eine weitere Ebene und die Kommunikation über diese Ebene, auf der Probleme auftreten.
Was Sie brauchen, ist eines von zwei Dingen:
So verbinden Sie Port 8080 auf der VirtualBox-VM mit Port 8080 auf dem Windows-Host, genau wie Sie den Docker-Container mit dem Host-Port verbinden.
um die VirtualBox-VM mit dem bridged
oben beschriebenen Netzwerkmodus direkt mit Ihrem lokalen Netzwerk zu verbinden .
Wenn Sie sich für die erste Option entscheiden, können Sie auf den Container zugreifen, in http://W:8080
dem W
sich die IP-Adresse oder der Hostname des Windows-Hosts befindet. Wenn Sie sich für die zweite Option entscheiden, können Sie auf den Container zugreifen, in http://L:8080
dem L
sich die IP-Adresse oder der Hostname der Linux-VM befindet.
Das ist also die übergeordnete Erklärung - jetzt müssen Sie herausfinden, wie Sie die Konfiguration der VirtualBox-VM ändern können. Und hier kann ich Ihnen nicht wirklich helfen - ich weiß nicht, mit welchem Tool Sie all dies auf Ihrem Windows-Computer ausführen, und ich bin mit der Verwendung von Docker unter Windows überhaupt nicht vertraut.
Wenn Sie zum VirtualBox-Konfigurationsfenster gelangen, können Sie die unten beschriebenen Änderungen vornehmen. Es gibt auch einen Befehlszeilenclient, der VMs ändert, aber ich bin damit nicht vertraut.
bridged
Fahren Sie für den Modus (und dies ist wirklich die einfachste Wahl) Ihre VM herunter, klicken Sie oben auf die Schaltfläche "Einstellungen" und ändern Sie den Netzwerkmodus in bridged
, starten Sie die VM neu und los geht's. Die VM sollte eine IP-Adresse in Ihrem lokalen Netzwerk über DHCP abrufen und für andere Computer im Netzwerk unter dieser IP-Adresse sichtbar sein.