TL; DR Sprawdź tryb sieciowy swojego hosta VirtualBox - powinno tak być, bridged
jeśli chcesz, aby maszyna wirtualna (i hostowany przez nią kontener Docker) była dostępna w sieci lokalnej.
Wygląda na to, że nie wiesz, z którym hostem się połączyć, aby uzyskać dostęp do aplikacji przez HTTP. Tak naprawdę nie sprecyzowałeś, jaka jest twoja konfiguracja - zamierzam zgadnąć, na podstawie faktu, że masz w swoich tagach „Windows” i „VirtualBox”.
Zgaduję, że masz Dockera działającego na jakimś smaku Linuksa działającego w VirtualBox na hoście Windows. Oznaczę adresy IP następująco:
D
= adres IP kontenera Docker
L
= adres IP hosta Linux działającego w VirtualBox
W
= adres IP hosta Windows
Gdy uruchomisz aplikację Go na hoście Windows, możesz połączyć się z nią z http://W:8080/
dowolnego miejsca w sieci lokalnej. Działa to, ponieważ aplikacja Go wiąże port 8080 na komputerze z systemem Windows i każdy, kto spróbuje uzyskać dostęp do portu 8080 pod adresem IP, W
zostanie połączony.
I tutaj sytuacja staje się bardziej skomplikowana:
VirtualBox, podczas konfigurowania maszyny wirtualnej (VM), może skonfigurować sieć w jednym z kilku różnych trybów. Nie pamiętam, jakie są różne opcje, ale ta, którą chcesz, jest bridged
. W tym trybie VirtualBox łączy maszynę wirtualną z siecią lokalną, tak jakby była maszyną samodzielną w sieci, tak jak każda inna maszyna podłączona do sieci. Wbridged
trybie maszyna wirtualna pojawia się w sieci jak każda inna maszyna. Inne tryby ustawiają rzeczy inaczej i urządzenie nie będzie widoczne w Twojej sieci.
Tak więc, zakładając, że poprawnie skonfigurujesz sieć dla hosta systemu Linux ( bridged
), host systemu Linux będzie miał adres IP w sieci lokalnej (np. 192.168.0.x) i będziesz mieć dostęp do kontenera Docker pod adresem http://L:8080/
.
Jeśli host Linux jest ustawiona na tryb inny niż pewnym bridged
, to może być w stanie uzyskać dostęp z hosta systemu Windows, ale to będzie zależeć od trybu dokładnie to, co jest w.
EDYCJA - na podstawie poniższych komentarzy wygląda na to, że sytuacja, którą opisałem powyżej, jest poprawna.
Cofnijmy się trochę: oto jak działa Docker na moim komputerze (Ubuntu Linux).
Wyobraź sobie, że uruchomienie tego samego polecenia mieć: docker run -p 8080:8080 dockertest
. To powoduje uruchomienie nowego kontenera na podstawie dockertest
obrazu i przekazanie (połączenie) portu 8080 na hoście Linux (mój komputer) do portu 8080 w kontenerze. Docker konfiguruje własną sieć wewnętrzną (z własnym zestawem adresów IP), aby umożliwić demonowi Dockera komunikację i umożliwić komunikację kontenerów ze sobą. Zasadniczo to, co z tym robisz, -p 8080:8080
to połączenie wewnętrznej sieci Dockera z siecią „zewnętrzną” - tj. karta sieciowa hosta - na określonym porcie.
Ze mną do tej pory? OK, teraz cofnijmy się o krok i spójrzmy na twój system. Na Twoim komputerze działa system Windows - Docker nie działa (obecnie) w systemie Windows, więc narzędzie, którego używasz, skonfigurowało hosta systemu Linux na maszynie wirtualnej VirtualBox. Kiedy robisz to docker run
w swoim środowisku, dzieje się dokładnie to samo - port 8080 na hoście Linux jest podłączony do portu 8080 w kontenerze. Duża różnica polega na tym, że twój host Windows nie jest hostem Linuksa, na którym działa kontener, więc jest tu kolejna warstwa i komunikacja w tej warstwie, w której napotykasz problemy.
Potrzebujesz jednej z dwóch rzeczy:
aby połączyć port 8080 na VM VirtualBox z portem 8080 na hoście Windows, tak jak podłączasz kontener Docker do portu hosta.
aby połączyć maszynę wirtualną VirtualBox bezpośrednio z siecią lokalną za pomocą bridged
trybie sieciowym, który opisałem powyżej.
Jeśli wybierzesz pierwszą opcję, będziesz mógł uzyskać dostęp do kontenera, w http://W:8080
którym W
znajduje się adres IP lub nazwa hosta systemu Windows. Jeśli wybierzesz drugą opcję, dostęp do kontenera będzie można uzyskać pod adresemhttp://L:8080
którym L
znajduje się adres IP lub nazwa hosta maszyny wirtualnej z systemem Linux.
To wszystko wyjaśnienie wyższego poziomu - teraz musisz dowiedzieć się, jak zmienić konfigurację maszyny wirtualnej VirtualBox. I tutaj nie mogę ci naprawdę pomóc - nie wiem, jakiego narzędzia używasz do zrobienia tego wszystkiego na komputerze z systemem Windows i wcale nie jestem zaznajomiony z używaniem Dockera w systemie Windows.
Jeśli możesz dostać się do okna konfiguracji VirtualBox, możesz wprowadzić zmiany opisane poniżej. Istnieje również klient wiersza poleceń, który modyfikuje maszyny wirtualne, ale nie jestem z tym zaznajomiony.
W przypadku bridged
trybu (a to naprawdę jest najprostszy wybór), wyłącz maszynę wirtualną, kliknij przycisk „Ustawienia” u góry i zmień tryb sieci na bridged
, a następnie uruchom ponownie maszynę wirtualną i gotowe. Maszyna wirtualna powinna odebrać adres IP w sieci lokalnej za pośrednictwem protokołu DHCP i powinna być widoczna dla innych komputerów w sieci pod tym adresem IP.