TL; DR Vérifiez le mode réseau de votre hôte VirtualBox - il devrait l'être bridged
si vous voulez que la machine virtuelle (et le conteneur Docker qu'elle héberge) soit accessible sur votre réseau local.
Il semble que votre confusion réside dans l'hôte auquel se connecter pour accéder à votre application via HTTP. Vous n'avez pas vraiment précisé quelle est votre configuration - je vais faire des suppositions, basées sur le fait que vous avez "Windows" et "VirtualBox" dans vos balises.
Je suppose que Docker fonctionne sur une certaine saveur de Linux fonctionnant dans VirtualBox sur un hôte Windows. Je vais étiqueter les adresses IP comme suit:
D
= l'adresse IP du conteneur Docker
L
= l'adresse IP de l'hôte Linux s'exécutant dans VirtualBox
W
= l'adresse IP de l'hôte Windows
Lorsque vous exécutez votre application Go sur votre hôte Windows, vous pouvez vous y connecter http://W:8080/
depuis n'importe où sur votre réseau local. Cela fonctionne car l'application Go lie le port 8080 sur la machine Windows et toute personne qui tente d'accéder au port 8080 à l'adresse IP W
se connecte.
Et voici où cela devient plus compliqué:
VirtualBox, lorsqu'il configure une machine virtuelle (VM), peut configurer le réseau dans l'un des différents modes. Je ne me souviens pas de toutes les différentes options, mais celle que vous voulez est bridged
. Dans ce mode, VirtualBox connecte la machine virtuelle à votre réseau local comme s'il s'agissait d'une machine autonome sur le réseau, comme toute autre machine connectée à votre réseau. En bridged
mode, la machine virtuelle apparaît sur votre réseau comme toute autre machine. D'autres modes configurent les choses différemment et la machine ne sera pas visible sur votre réseau.
Donc, en supposant que vous configuriez correctement le réseau pour l'hôte Linux ( bridged
), l'hôte Linux aura une adresse IP sur votre réseau local (quelque chose comme 192.168.0.x) et vous pourrez accéder à votre conteneur Docker à http://L:8080/
.
Si l'hôte Linux est défini sur un mode autre que bridged
, vous pourrez peut- être accéder à partir de l'hôte Windows, mais cela dépendra exactement du mode dans lequel il se trouve.
EDIT - sur la base des commentaires ci-dessous, cela ressemble beaucoup à la situation que j'ai décrite ci-dessus est correcte.
Reculons un peu: voici comment Docker fonctionne sur mon ordinateur (Ubuntu Linux).
Imaginez que je lance la même commande que vous avez: docker run -p 8080:8080 dockertest
. Cela permet de démarrer un nouveau conteneur basé sur l' dockertest
image et de transférer (connecter) le port 8080 sur l'hôte Linux (mon PC) vers le port 8080 sur le conteneur. Docker configure son propre réseau interne (avec son propre ensemble d'adresses IP) pour permettre au démon Docker de communiquer et pour permettre aux conteneurs de communiquer entre eux. Donc, fondamentalement, ce que vous faites avec cela, -p 8080:8080
c'est de connecter le réseau interne de Docker au réseau "externe" - c'est-à-dire. l'adaptateur réseau de l'hôte - sur un port particulier.
Avec moi si loin? OK, prenons maintenant du recul et regardons votre système. Votre machine exécute Windows - Docker ne fonctionne pas (actuellement) sous Windows, donc l'outil que vous utilisez a configuré un hôte Linux dans une machine virtuelle VirtualBox. Lorsque vous faites le docker run
dans votre environnement, exactement la même chose se produit: le port 8080 sur l'hôte Linux est connecté au port 8080 sur le conteneur. La grande différence ici est que votre hôte Windows n'est pas l'hôte Linux sur lequel le conteneur s'exécute, il y a donc une autre couche ici et c'est la communication à travers cette couche où vous rencontrez des problèmes.
Ce dont vous avez besoin est l'une des deux choses suivantes:
pour connecter le port 8080 sur la VM VirtualBox au port 8080 sur l'hôte Windows, tout comme vous connectez le conteneur Docker au port hôte.
pour connecter la VM VirtualBox directement à votre réseau local avec le bridged
mode réseau décrit ci-dessus.
Si vous optez pour la première option, vous pourrez accéder au conteneur http://W:8080
où se W
trouve l'adresse IP ou le nom d'hôte de l'hôte Windows. Si vous optez pour le second, vous pourrez accéder au conteneur http://L:8080
où se L
trouve l'adresse IP ou le nom d'hôte de la VM Linux.
C'est donc toute l'explication de niveau supérieur - vous devez maintenant comprendre comment modifier la configuration de la VM VirtualBox. Et voici où je ne peux pas vraiment vous aider - je ne sais pas quel outil vous utilisez pour faire tout cela sur votre machine Windows et je ne suis pas du tout familiarisé avec l'utilisation de Docker sur Windows.
Si vous pouvez accéder à la fenêtre de configuration de VirtualBox, vous pouvez effectuer les modifications décrites ci-dessous. Il existe également un client de ligne de commande qui modifiera les machines virtuelles, mais je ne suis pas familier avec cela.
Pour le bridged
mode (et c'est vraiment le choix le plus simple), arrêtez votre VM, cliquez sur le bouton "Paramètres" en haut et changez le mode réseau en bridged
, puis redémarrez la VM et vous êtes prêt à partir. La machine virtuelle doit récupérer une adresse IP sur votre réseau local via DHCP et doit être visible par les autres ordinateurs du réseau à cette adresse IP.