
У меня установлен ToolBox на Windows 10.
Создана машина и контейнер Nginx, открытый снаружи на порту 8000.
IP-адрес машины Docker — 192.168.99.100
, IP-адрес контейнера — 172.17.0.2
.
Я могу получить доступ к Nginx из Windows как 192.168.99.100:8000
. Более того, я могу получить доступ с хоста Windows напрямую к 172.17.0.2:80
. Также я могу получить доступ к Интернету изнутри контейнера.
В целом конфигурация следующая:
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
Проблема в том, что я не могу подключить Nginx вне хоста Windows. Пробовал telnet 192.168.1.3 8000
с роутера - соединение отклонено. У меня нет антивируса на машине Windows, а брандмауэр отключен.
решение1
Через некоторое время я сам нашел себе увлажняющий раствор :)
VirtualBox -> Machine settings -> Network -> Adapter 1 (NAT) -> Advanced, Port Forwarding
Добавьте правило, как http
на скриншоте:
Правило ssh
было автоматически добавлено docker-machine create
. Последний вопрос — как добавить http
правило автоматически, когда docker создает контейнер с открытыми портами.
решение2
Ваше название - Интернет, но ваше решение подразумевает локальную сеть.
этот код выполняет аналогичный трюк:
netsh interface portproxy add v4tov4 listenport=80 connectaddress=192.168.99.100 connectport=8000 protocol=tcp