Kein Zugriff auf Docker-Container in Virtualbox über das Internet möglich

Kein Zugriff auf Docker-Container in Virtualbox über das Internet möglich

Ich habe ToolBox unter Windows 10 installiert.
Habe eine Maschine und einen Nginx-Container erstellt und diese außerhalb auf Port 8000 geöffnet.

Bildbeschreibung hier eingeben

Die IP der Docker-Maschine ist 192.168.99.100, die IP des Containers ist 172.17.0.2.
Ich kann von Windows aus als auf Nginx zugreifen 192.168.99.100:8000. Darüber hinaus kann ich vom Windows-Host direkt auf zugreifen 172.17.0.2:80. Außerdem kann ich vom Container aus auf das Internet zugreifen.

Insgesamt ist die Konfiguration wie folgt:

Container (Nginx)           Docker Host (VirtualBox)            Host (Windows 10)                                                     Router
172.17.0.2:80 <-----------> 172.17.0.1 (docker0)
                            10.0.2.15 (eth0)
                            192.168.99.100:8000 (eth1) <------> 192.168.99.1 (Ethernet 2, VirtualBox Host-Only Ethernet Adapter)
                                                                192.168.1.3 (Ethernet, Intel Hardware Adapter) <--------------------> 192.168.1.1
                                                                                                                                      <Internet static IP address> <-----------> Provider

Das Problem ist, dass ich Nginx außerhalb des Windows-Hosts nicht verbinden kann. Habe es telnet 192.168.1.3 8000vom Router aus versucht – Verbindung abgelehnt. Ich habe kein Antivirenprogramm auf meinem Windows-Rechner und die Firewall ist ausgeschaltet.

Antwort1

Nach einiger Zeit habe ich selbst eine Lösung gefunden :)

VirtualBox -> Machine settings -> Network -> Adapter 1 (NAT) -> Advanced, Port Forwarding

Fügen Sie eine Regel wie httpim Screenshot hinzu:

Bildbeschreibung hier eingeben

Die Regel sshwurde automatisch hinzugefügt von docker-machine create. Die letzte Frage ist, wie man httpautomatisch eine Regel hinzufügt, wenn Docker einen Container mit freigegebenen Ports erstellt.

Antwort2

Ihr Titel ist Internet, aber Ihre Lösung sieht so aus, als ob Sie LAN meinen.

Dieser Code macht einen ähnlichen Trick:

netsh interface portproxy add v4tov4 listenport=80 connectaddress=192.168.99.100 connectport=8000 protocol=tcp

verwandte Informationen