TL; DR Verifique el modo de red de su host VirtualBox; debería serlo bridged
si desea que la máquina virtual (y el contenedor Docker que está alojando) sea accesible en su red local.
Parece que su confusión radica en a qué host conectarse para acceder a su aplicación a través de HTTP. Realmente no ha explicado en detalle cuál es su configuración; voy a hacer algunas conjeturas, basándome en el hecho de que tiene "Windows" y "VirtualBox" en sus etiquetas.
Supongo que tiene Docker ejecutándose en algún tipo de Linux ejecutándose en VirtualBox en un host de Windows. Voy a etiquetar las direcciones IP de la siguiente manera:
D
= la dirección IP del contenedor Docker
L
= la dirección IP del host Linux que se ejecuta en VirtualBox
W
= la dirección IP del host de Windows
Cuando ejecuta su aplicación Go en su host de Windows, puede conectarse http://W:8080/
desde cualquier lugar de su red local. Esto funciona porque la aplicación Go vincula el puerto 8080 en la máquina con Windows y cualquiera que intente acceder al puerto 8080 en la dirección IP W
se conectará.
Y aquí es donde se vuelve más complicado:
VirtualBox, cuando configura una máquina virtual (VM), puede configurar la red en uno de varios modos diferentes. No recuerdo cuáles son todas las diferentes opciones, pero la que quieres es bridged
. En este modo, VirtualBox conecta la máquina virtual a su red local como si fuera una máquina independiente en la red, como cualquier otra máquina que estuviera conectada a su red. En el bridged
modo, la máquina virtual aparece en su red como cualquier otra máquina. Otros modos configuran las cosas de manera diferente y la máquina no será visible en su red.
Por lo tanto, suponiendo que configuró la red correctamente para el host de Linux ( bridged
), el host de Linux tendrá una dirección IP en su red local (algo así como 192.168.0.x) y podrá acceder a su contenedor Docker en http://L:8080/
.
Si el host de Linux está configurado en un modo distinto a bridged
, es posible que pueda acceder desde el host de Windows, pero esto dependerá exactamente del modo en el que se encuentre.
EDITAR : según los comentarios a continuación, parece que la situación que describí anteriormente es correcta.
Retrocedamos un poco: así es como funciona Docker en mi computadora (Ubuntu Linux).
Imagino corro el mismo comando que tenga: docker run -p 8080:8080 dockertest
. Lo que hace esto es iniciar un nuevo contenedor basado en la dockertest
imagen y reenviar (conectar) el puerto 8080 en el host Linux (mi PC) al puerto 8080 en el contenedor. Docker configura su propia red interna (con su propio conjunto de direcciones IP) para permitir que el demonio de Docker se comunique y permitir que los contenedores se comuniquen entre sí. Entonces, básicamente, lo que está haciendo -p 8080:8080
es conectar la red interna de Docker con la red "externa", es decir. el adaptador de red del host, en un puerto en particular.
Conmigo hasta ahora? Bien, ahora demos un paso atrás y observemos su sistema. Su máquina está ejecutando Windows: Docker no se ejecuta (actualmente) en Windows, por lo que la herramienta que está utilizando ha configurado un host Linux en una máquina virtual VirtualBox. Cuando lo hace docker run
en su entorno, ocurre exactamente lo mismo: el puerto 8080 del host Linux está conectado al puerto 8080 del contenedor. La gran diferencia aquí es que su host de Windows no es el host de Linux en el que se ejecuta el contenedor, por lo que hay otra capa aquí y es la comunicación a través de esta capa en la que tiene problemas.
Lo que necesita es una de dos cosas:
para conectar el puerto 8080 en VirtualBox VM al puerto 8080 en el host de Windows, al igual que conecta el contenedor Docker al puerto del host.
para conectar la VM VirtualBox directamente a su red local con el bridged
modo de red que describí anteriormente.
Si elige la primera opción, podrá acceder al contenedor http://W:8080
donde W
está la dirección IP o el nombre de host del host de Windows. Si opta por el segundo, podrá acceder al contenedor http://L:8080
donde L
está la dirección IP o el nombre de host de la VM Linux.
Así que esa es toda la explicación de nivel superior: ahora necesita descubrir cómo cambiar la configuración de VirtualBox VM. Y aquí es donde realmente no puedo ayudarlo: no sé qué herramienta está usando para hacer todo esto en su máquina con Windows y no estoy familiarizado con el uso de Docker en Windows.
Si puede acceder a la ventana de configuración de VirtualBox, puede realizar los cambios que se describen a continuación. También hay un cliente de línea de comandos que modificará las máquinas virtuales, pero no estoy familiarizado con eso.
Para el bridged
modo (y esta es realmente la opción más simple), apague su máquina virtual, haga clic en el botón "Configuración" en la parte superior y cambie el modo de red a bridged
, luego reinicie la máquina virtual y listo. La VM debería recoger una dirección IP en su red local a través de DHCP y debería ser visible para otras computadoras en la red en esa dirección IP.