TL; DR Проверьте сетевой режим вашего хоста VirtualBox - он должен быть, bridged
если вы хотите, чтобы виртуальная машина (и контейнер Docker, на котором она размещена) были доступны в вашей локальной сети.
Похоже, ваша путаница заключается в том, к какому хосту подключиться, чтобы получить доступ к вашему приложению через HTTP. Вы на самом деле не объяснили, какая у вас конфигурация - я собираюсь сделать несколько предположений, основываясь на том факте, что у вас есть «Windows» и «VirtualBox» в ваших тегах.
Я предполагаю, что у вас есть Docker, работающий на какой-то разновидности Linux, работающей в VirtualBox на хосте Windows. Я собираюсь обозначить IP-адреса следующим образом:
D
= IP-адрес контейнера Docker
L
= IP-адрес хоста Linux, работающего в VirtualBox
W
= IP-адрес хоста Windows
Когда вы запускаете приложение Go на хосте Windows, вы можете подключиться к нему http://W:8080/
из любой точки локальной сети. Это работает, потому что приложение Go связывает порт 8080 на машине с Windows, и любой, кто пытается получить доступ к порту 8080 по IP-адресу, W
будет подключен.
И вот здесь все усложняется:
VirtualBox, когда он устанавливает виртуальную машину (ВМ), может настроить сеть в одном из нескольких различных режимов. Я не помню, какие есть разные варианты, но тот, который вам нужен, есть bridged
. В этом режиме VirtualBox подключает виртуальную машину к вашей локальной сети, как если бы это была отдельная машина в сети, как и любая другая машина, подключенная к вашей сети. В bridged
режиме виртуальная машина появляется в вашей сети, как и любая другая машина. В других режимах все настроено иначе, и машина не будет видна в вашей сети.
Итак, если вы правильно настроили сеть для хоста Linux ( bridged
), хост Linux будет иметь IP-адрес в вашей локальной сети (что-то вроде 192.168.0.x), и вы сможете получить доступ к своему контейнеру Docker по адресу http://L:8080/
.
Если хост Linux установлен в какой-либо режим, отличный от bridged
, вы можете получить доступ с хоста Windows, но это будет зависеть от того, в каком именно режиме он находится.
РЕДАКТИРОВАТЬ - судя по комментариям ниже, похоже, что описанная выше ситуация верна.
Давайте сделаем резервную копию: вот как Docker работает на моем компьютере (Ubuntu Linux).
Представьте себе , я запускаю ту же команду , вы должны: docker run -p 8080:8080 dockertest
. Это запускает новый контейнер на основе dockertest
образа и перенаправляет (подключает) порт 8080 на хосте Linux (мой компьютер) на порт 8080 на контейнере. Docker настраивает собственную внутреннюю сеть (со своим собственным набором IP-адресов), чтобы демон Docker мог взаимодействовать, а контейнеры - друг с другом. Итак, в основном то, что вы делаете с этим, -p 8080:8080
- это соединение внутренней сети Docker с «внешней» сетью, т.е. сетевой адаптер хоста - на конкретный порт.
Со мной так далеко? Хорошо, теперь давайте сделаем шаг назад и посмотрим на вашу систему. На вашем компьютере работает Windows - Docker (в настоящее время) не работает в Windows, поэтому используемый вами инструмент настроил хост Linux на виртуальной машине VirtualBox. Когда вы делаете это docker run
в своей среде, происходит то же самое - порт 8080 на хосте Linux соединяется с портом 8080 на контейнере. Большая разница здесь в том, что ваш хост Windows не является хостом Linux, на котором работает контейнер, поэтому здесь есть еще один уровень, и это связь через этот уровень, на котором вы сталкиваетесь с проблемами.
Вам нужно одно из двух:
для подключения порта 8080 на виртуальной машине VirtualBox к порту 8080 на хосте Windows, точно так же, как вы подключаете контейнер Docker к порту хоста.
чтобы подключить виртуальную машину VirtualBox напрямую к вашей локальной сети в bridged
описанном выше сетевом режиме.
Если вы выберете первый вариант, вы сможете получить доступ к контейнеру, http://W:8080
где W
находится IP-адрес или имя хоста Windows. Если вы выберете второй вариант, вы сможете получить доступ к контейнеру, в http://L:8080
котором L
находится IP-адрес или имя хоста виртуальной машины Linux.
Итак, это все объяснение более высокого уровня - теперь вам нужно выяснить, как изменить конфигурацию виртуальной машины VirtualBox. И вот здесь я не могу вам помочь - я не знаю, какой инструмент вы используете для всего этого на своем компьютере с Windows, и я совсем не знаком с использованием Docker в Windows.
Если вы можете перейти в окно конфигурации VirtualBox, вы можете внести изменения, описанные ниже. Существует также клиент командной строки, который изменяет виртуальные машины, но я с этим не знаком.
Для bridged
режима (и это действительно самый простой выбор) выключите виртуальную машину, нажмите кнопку «Настройки» вверху и измените сетевой режим на bridged
, затем перезапустите виртуальную машину, и все готово. Виртуальная машина должна получать IP-адрес в вашей локальной сети через DHCP и должна быть видна другим компьютерам в сети по этому IP-адресу.