No puedo acceder al contenedor Docker en virtualbox desde Internet

No puedo acceder al contenedor Docker en virtualbox desde Internet

Tengo ToolBox instalado en Windows 10.
Creé la máquina y el contenedor Nginx, abierto afuera en el puerto 8000.

ingrese la descripción de la imagen aquí

La IP de la máquina Docker es 192.168.99.100, la IP del contenedor es 172.17.0.2.
Puedo acceder a Nginx desde Windows como 192.168.99.100:8000. Aún más, puedo acceder desde el host de Windows directamente a 172.17.0.2:80. También puedo acceder a Internet desde el interior del contenedor.

En general la configuración es la siguiente:

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

El problema es que no puedo conectar Nginx fuera del host de Windows. Intenté telnet 192.168.1.3 8000desde el enrutador: se rechazó la conexión. No tengo ningún antivirus en la máquina con Windows y el firewall está desactivado.

Respuesta1

Después de un tiempo, encontré la solución yo mismo :)

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

Agregue una regla como httpen la captura de pantalla:

ingrese la descripción de la imagen aquí

La regla sshha sido agregada automáticamente por docker-machine create. La última pregunta es cómo agregar httpuna regla automáticamente cuando Docker crea un contenedor con puertos expuestos.

Respuesta2

Su título es Internet, pero su solución prefiere que se refiera a LAN.

este código hace un truco similar:

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

información relacionada