TL; DR Verifique o modo de rede de seu host VirtualBox - deve ser bridged
se você quiser que a máquina virtual (e o contêiner Docker que está hospedando) acessível em sua rede local.
Parece que sua confusão está em qual host se conectar para acessar seu aplicativo via HTTP. Você realmente não especificou qual é a sua configuração - vou fazer algumas suposições, com base no fato de que você tem "Windows" e "VirtualBox" em suas tags.
Suponho que você tenha o Docker rodando em algum tipo de Linux rodando no VirtualBox em um host Windows. Vou rotular os endereços IP da seguinte maneira:
D
= o endereço IP do contêiner Docker
L
= o endereço IP do host Linux em execução no VirtualBox
W
= o endereço IP do host Windows
Quando você executa seu aplicativo Go em seu host Windows, pode se conectar a ele http://W:8080/
de qualquer lugar em sua rede local. Isso funciona porque o aplicativo Go liga a porta 8080 na máquina Windows e qualquer pessoa que tentar acessar a porta 8080 no endereço IP W
será conectada.
E é aqui que fica mais complicado:
O VirtualBox, ao configurar uma máquina virtual (VM), pode configurar a rede em um dos vários modos diferentes. Não me lembro quais são as diferentes opções, mas a que você quer é bridged
. Neste modo, o VirtualBox conecta a máquina virtual à sua rede local como se fosse uma máquina autônoma na rede, como qualquer outra máquina conectada à sua rede. No bridged
modo, a máquina virtual aparece em sua rede como qualquer outra máquina. Outros modos configuram as coisas de maneira diferente e a máquina não ficará visível na rede.
Portanto, supondo que você configurou a rede corretamente para o host Linux ( bridged
), o host Linux terá um endereço IP em sua rede local (algo como 192.168.0.x) e você poderá acessar seu contêiner Docker em http://L:8080/
.
Se o host Linux estiver configurado para algum modo diferente bridged
, você poderá acessar do host Windows, mas isso dependerá exatamente do modo em que ele está.
EDITAR - com base nos comentários abaixo, parece muito que a situação que descrevi acima está correta.
Vamos recuar um pouco: é assim que o Docker funciona no meu computador (Ubuntu Linux).
Imagine que eu executar o mesmo comando que você tem: docker run -p 8080:8080 dockertest
. O que isso faz é iniciar um novo contêiner com base na dockertest
imagem e encaminhar (conectar) a porta 8080 no host Linux (meu PC) para a porta 8080 no contêiner. O Docker configura sua própria rede interna (com seu próprio conjunto de endereços IP) para permitir que o daemon do Docker se comunique e que os contêineres se comuniquem uns com os outros. Então, basicamente o que você está fazendo com isso -p 8080:8080
é conectar a rede interna do Docker com a rede "externa" - ou seja, o adaptador de rede do host - em uma porta específica.
Comigo até agora? OK, agora vamos dar um passo atrás e olhar para o seu sistema. Sua máquina está executando o Windows - o Docker (atualmente) não é executado no Windows, portanto, a ferramenta que você está usando configurou um host Linux em uma máquina virtual VirtualBox. Quando você faz isso docker run
em seu ambiente, ocorre exatamente a mesma coisa - a porta 8080 no host Linux é conectada à porta 8080 no contêiner. A grande diferença aqui é que seu host Windows não é o host Linux no qual o contêiner está sendo executado, portanto, há outra camada aqui e é a comunicação através desta camada onde você está tendo problemas.
O que você precisa é de duas coisas:
para conectar a porta 8080 no VirtualBox VM à porta 8080 no host do Windows, da mesma forma que você conecta o contêiner do Docker à porta do host.
para conectar o VirtualBox VM diretamente à sua rede local com o bridged
modo de rede que descrevi acima.
Se você escolher a primeira opção, poderá acessar o contêiner em http://W:8080
que W
está o endereço IP ou o nome do host do Windows. Se você optar pelo segundo, poderá acessar o contêiner em http://L:8080
que L
está o endereço IP ou nome do host da VM Linux.
Portanto, essa é toda a explicação de nível superior - agora você precisa descobrir como alterar a configuração do VirtualBox VM. E é aqui que não posso ajudá-lo - não sei qual ferramenta você está usando para fazer tudo isso em sua máquina Windows e não estou familiarizado com o uso do Docker no Windows.
Se você conseguir acessar a janela de configuração do VirtualBox, poderá fazer as alterações descritas a seguir. Também existe um cliente de linha de comando que modificará as VMs, mas não estou familiarizado com isso.
Para o bridged
modo (e esta realmente é a escolha mais simples), desligue sua VM, clique no botão "Configurações" na parte superior e altere o modo de rede para bridged
, reinicie a VM e pronto. A VM deve obter um endereço IP em sua rede local via DHCP e deve ser visível para outros computadores na rede naquele endereço IP.