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, налаштовуючи віртуальну машину (VM), може налаштувати мережу в одному з декількох різних режимів. Я не пам’ятаю, які існують різні варіанти, але той, який ви хочете, - це bridged
. У цьому режимі VirtualBox підключає віртуальну машину до вашої локальної мережі так, ніби це автономна машина в мережі, як і будь-яка інша машина, підключена до вашої мережі. У bridged
режимі віртуальна машина з’являється у вашій мережі, як і будь-яка інша машина. Інші режими налаштовують інакше, і апарат не буде видно у вашій мережі.
Отже, якщо припустити, що ви правильно налаштували мережу для хосту Linux ( bridged
), хост Linux матиме IP-адресу у вашій локальній мережі (щось на зразок 192.168.0.x), і ви зможете отримати доступ до свого контейнера Docker за адресою http://L:8080/
.
Якщо для хоста Linux встановлено інший режим, ніж bridged
, можливо , ви зможете отримати доступ із хосту Windows, але це буде залежати від того, в якому саме режимі він знаходиться.
EDIT - виходячи з коментарів нижче, схоже, ситуація, яку я описав вище, є правильною.
Давайте зробимо трохи резервної копії: ось як 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 VM до порту 8080 на хості Windows, подібно до того, як ви підключаєте контейнер Docker до порту хосту.
для підключення VirtualBox VM безпосередньо до вашої локальної мережі за допомогою bridged
мережевого режиму, який я описав вище.
Якщо ви вибрали перший варіант, ви зможете отримати доступ до контейнера за адресою, http://W:8080
де W
знаходиться IP-адреса або ім’я хосту Windows. Якщо ви оберете другу, ви зможете отримати доступ до контейнера за адресою, http://L:8080
де L
знаходиться IP-адреса або ім'я хосту віртуальної машини Linux.
Отже, це все пояснення вищого рівня - тепер вам потрібно з’ясувати, як змінити конфігурацію VirtualBox VM. І ось тут я не можу вам дійсно допомогти - я не знаю, за допомогою якого інструменту ви все це робите на своїй машині Windows, і я зовсім не знайомий з використанням Docker в Windows.
Якщо ви можете перейти до вікна конфігурації VirtualBox, ви можете внести зміни, описані нижче. Існує також клієнт командного рядка, який буде модифікувати віртуальні машини, але я з цим не знайомий.
Для bridged
режиму (і це насправді найпростіший вибір) вимкніть ВМ, натисніть кнопку «Налаштування» вгорі та змініть режим мережі на bridged
, а потім перезапустіть ВМ, і все готово. Віртуальна машина повинна підібрати IP-адресу у вашій локальній мережі через DHCP і бути видимою для інших комп'ютерів у мережі за цією IP-адресою.