Não é possível acessar o contêiner do Docker no VirtualBox pela Internet

Não é possível acessar o contêiner do Docker no VirtualBox pela Internet

Tenho o ToolBox instalado no Windows 10.
Criei a máquina e o contêiner Nginx, aberto externamente na porta 8000.

insira a descrição da imagem aqui

O IP da máquina Docker é 192.168.99.100, o IP do contêiner é 172.17.0.2.
Posso acessar o Nginx do Windows como 192.168.99.100:8000. Ainda mais, posso acessar do host do Windows diretamente para o 172.17.0.2:80. Também posso acessar a Internet de dentro do contêiner.

No geral a configuração é a seguinte:

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

O problema é que não consigo conectar o Nginx fora do host do Windows. Tentei telnet 192.168.1.3 8000no roteador - conexão recusada. Não tenho nenhum antivírus na máquina Windows e o firewall está desativado.

Responder1

Depois de um tempo, encontrei a solução :)

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

Adicione uma regra como httpna captura de tela:

insira a descrição da imagem aqui

A regra sshfoi adicionada automaticamente por docker-machine create. A última questão é como adicionar httpregras automaticamente quando o docker cria um contêiner com portas expostas.

Responder2

Seu título é internet, mas sua solução prefere que você queira dizer LAN.

este código faz o mesmo truque:

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

informação relacionada