TL; DR Controlla la modalità di rete del tuo host VirtualBox: dovrebbe essere bridged
se vuoi che la macchina virtuale (e il contenitore Docker che ospita) sia accessibile sulla tua rete locale.
Sembra che la tua confusione risieda nell'host a cui connetterti per accedere alla tua applicazione tramite HTTP. Non hai davvero spiegato quale sia la tua configurazione - farò alcune ipotesi, in base al fatto che hai "Windows" e "VirtualBox" nei tuoi tag.
Immagino che tu abbia Docker in esecuzione su alcune versioni di Linux in esecuzione in VirtualBox su un host Windows. Etichetterò gli indirizzi IP come segue:
D
= l'indirizzo IP del contenitore Docker
L
= l'indirizzo IP dell'host Linux in esecuzione in VirtualBox
W
= l'indirizzo IP dell'host Windows
Quando esegui l'applicazione Go sul tuo host Windows, puoi connetterti ad essa http://W:8080/
da qualsiasi punto della rete locale. Questo funziona perché l'applicazione Go collega la porta 8080 sulla macchina Windows e chiunque tenti di accedere alla porta 8080 all'indirizzo IP W
si connetterà.
Ed è qui che diventa più complicato:
VirtualBox, quando imposta una macchina virtuale (VM), può configurare la rete in una delle diverse modalità. Non ricordo quali siano tutte le diverse opzioni, ma quella che vuoi è bridged
. In questa modalità, VirtualBox connette la macchina virtuale alla rete locale come se fosse una macchina autonoma sulla rete, proprio come qualsiasi altra macchina collegata alla rete. In bridged
modalità, la macchina virtuale appare sulla rete come qualsiasi altra macchina. Altre modalità impostano le cose in modo diverso e la macchina non sarà visibile sulla rete.
Quindi, supponendo che tu abbia configurato correttamente la rete per l'host Linux ( bridged
), l'host Linux avrà un indirizzo IP sulla tua rete locale (qualcosa come 192.168.0.x) e sarai in grado di accedere al tuo contenitore Docker su http://L:8080/
.
Se l'host Linux è impostato su una modalità diversa da bridged
, potresti essere in grado di accedere dall'host Windows, ma questo dipenderà esattamente dalla modalità in cui si trova.
MODIFICA - in base ai commenti qui sotto, sembra molto simile alla situazione che ho descritto sopra è corretta.
Facciamo un piccolo backup: ecco come funziona Docker sul mio computer (Ubuntu Linux).
Immaginate corro lo stesso comando si ha: docker run -p 8080:8080 dockertest
. Ciò che fa è avviare un nuovo contenitore basato dockertest
sull'immagine e inoltrare (connettere) la porta 8080 sull'host Linux (il mio PC) alla porta 8080 sul contenitore. Docker configura la propria rete interna (con il proprio set di indirizzi IP) per consentire al daemon Docker di comunicare e per consentire ai contenitori di comunicare tra loro. Quindi fondamentalmente quello che stai facendo con questo -p 8080:8080
è connettere la rete interna di Docker con la rete "esterna", ad es. l'adattatore di rete dell'host - su una particolare porta.
Con me finora? OK, ora facciamo un passo indietro e guardiamo il tuo sistema. La tua macchina esegue Windows: Docker non funziona (attualmente) su Windows, quindi lo strumento che stai utilizzando ha configurato un host Linux in una macchina virtuale VirtualBox. Quando si esegue l'operazione docker run
nel proprio ambiente, accade esattamente la stessa cosa: la porta 8080 sull'host Linux è collegata alla porta 8080 sul contenitore. La grande differenza qui è che il tuo host Windows non è l'host Linux su cui è in esecuzione il contenitore, quindi c'è un altro livello qui ed è la comunicazione attraverso questo livello in cui stai riscontrando problemi.
Quello che ti serve è una delle due cose:
per connettere la porta 8080 sulla VM VirtualBox alla porta 8080 sull'host Windows, proprio come connetti il contenitore Docker alla porta host.
per connettere la VM VirtualBox direttamente alla tua rete locale con la bridged
modalità di rete che ho descritto sopra.
Se scegli la prima opzione, sarai in grado di accedere al contenitore in http://W:8080
cui si W
trova l'indirizzo IP o il nome host dell'host Windows. Se si opta per il secondo, sarà possibile accedere al contenitore in http://L:8080
cui si L
trova l'indirizzo IP o il nome host della VM Linux.
Quindi questa è tutta la spiegazione di livello superiore: ora devi capire come modificare la configurazione della VM VirtualBox. Ed è qui che non posso davvero aiutarti: non so quale strumento stai usando per fare tutto questo sulla tua macchina Windows e non ho familiarità con l'utilizzo di Docker su Windows.
Se riesci ad accedere alla finestra di configurazione di VirtualBox, puoi apportare le modifiche descritte di seguito. C'è anche un client a riga di comando che modificherà le VM, ma non ne ho familiarità.
Per la bridged
modalità (e questa è davvero la scelta più semplice), spegni la VM, fai clic sul pulsante "Impostazioni" in alto e cambia la modalità di rete in bridged
, quindi riavvia la VM e sei a posto. La VM dovrebbe rilevare un indirizzo IP sulla rete locale tramite DHCP e dovrebbe essere visibile ad altri computer sulla rete a quell'indirizzo IP.