web-dev-qa-db-fra.com

Docker sous Windows: comment se connecter au conteneur à partir de l'hôte à l'aide du conteneur IP?

J'ai

  • Windows 10
  • Docker pour Windows V. 1.12.5 Rév. 9503, qui ne repose plus sur boot2docker ou VirtualBox.

J'ai un certain nombre d'instances JBoss s'exécutant dans des images Docker (172.18.0.2 est une base de données):

  • instance 1: nom: jboss-eap, IP: 172.18.0.3
  • instance 2: nom: jboss-eap-arquillian, IP: 172.18.0.4

qui courra en même temps. Chaque instance JBoss exportée, par exemple ses ports 8787, 8080 et 8443.

J'ai également créé un réseau ponté: Réseau docker create --driver bridge --subnet 172.18.0.0/24 bridged_network

Actuellement, j'ai configuré un transfert de port local de sorte que l'hôte puisse accéder aux différents services à l'aide d'un préfixe (par exemple, lorsqu'il accède au port 8080 de l'instance 1, l'hôte utilise localhost: 28080 pour se connecter). Mais c'est assez sujet aux erreurs.

Maintenant, je souhaite accéder à ces ports à partir de l'hôte en utilisant l'adresse IP du conteneur, par exemple. appelant 172.18.0.4:8080 (étape suivante: en utilisant le nom d'hôte: jboss-eap-arquillian: 8080) . Bien que cela fonctionne correctement d'un conteneur à l'autre, je n'ai pas été en mesure de le configurer pour la connexion. l'hôte.

Il existe une interface réseau Windows (type: DockerNAT) ayant l’adresse IP 10.0.75.1, mais il est possible que je l’aie créée manuellement (je ne sais pas ... j'essaie depuis un certain temps déjà). Mais cela est utile pour lier le port du conteneur à ce périphérique, par exemple. docker run ... -p 10.0.75.1:8080:8080. Je peux ensuite appeler le service en utilisant 10.0.75.1:8080, mais cela ne m'aide pas pour le deuxième conteneur.

J'ai également essayé d'utiliser le périphérique réseau du Docker Host, mais cela A. semble fonctionner pour une seule machine b. Je ne peux pas définir l'IP de manière statique, ce qui est nécessaire pour les tests JUnit exécutant une configuration statique . Remarque: je ne peux pas compter sur le réseau DHCP pour attribuer une IP au démarrage, car je change fréquemment de réseau (et donc de DHCP), résultant en une adresse IP non fixée à nouveau.

Donc, fondamentalement, je cherche un moyen de configurer le réseau/conteneur de manière à pouvoir appeler le service fourni par le conteneur (par exemple sur le port 8080) à l'aide de l'adresse IP du conteneur (par exemple, 172.18.0.3 pour l'exemple 1). de l'hôte à l'aide de 172.18.0.3:8080.

9
kniffte

Sur le menu fixe pour Windows, vous pouvez utiliser l’adresse 10.0.75.1:8080, mais vous devez configurer votre pare-feu. Une meilleure méthode consiste à utiliser l’adresse 10.0.75.2:8080,

pour les deux adresses, vous devez publier votre port lorsque vous exécutez le conteneur

docker run -p 8080:8080 image_name

Plus d'infos https://github.com/docker/for-win/issues/334#issuecomment-297030101

8
hrakup

vous ne pouvez pas. docker n'est pas une machine virtuelle et vous n'avez pas accès à l'hôte de docker via l'adresse IP.

voir ma même question ici: https://forums.docker.com/t/access-dockerized-services-via-the-containers-ip-address/21151

et ma réalisation de comment cela fonctionne, ici: https://derickbailey.com/2016/08/29/so-youre-saying-docker-isnt-a-virtual-machine/

si vous devez utiliser l'application hébergée dans le conteneur, à partir de votre hôte local, exposez le port de l'application avec l'option -p de docker run.

docker run -p 8080:8080 image_name

puis connectez-vous à localhost:8080 pour ce service

0
Derick Bailey