Comme indiqué dans l'un des commentaires, cela fonctionne pour Mac (probablement pour Windows/Linux aussi) :
JE VEUX ME CONNECTER D'UN CONTENEUR À UN SERVICE SUR L'HÔTE
L'hôte a une adresse IP changeante (ou aucune si vous n'avez pas d'accès au réseau). Nous vous recommandons de vous connecter au nom DNS spécial
host.docker.internal
qui résout l'adresse IP interne utilisée par l'hôte. Ceci est à des fins de développement et ne fonctionnera pas dans un environnement de production en dehors de Docker Desktop pour Mac.Vous pouvez également atteindre la passerelle en utilisant
gateway.docker.internal
.
Cité de https://docs.docker.com/docker-for-mac/networking/
Cela a fonctionné pour moi sans utiliser --net=host
.
Un moyen simple mais relativement peu sûr serait d'utiliser le --net=host
option à docker run
.
Cette option fait en sorte que le conteneur utilise la pile réseau de l'hôte. Ensuite, vous pouvez vous connecter aux services exécutés sur l'hôte simplement en utilisant "localhost" comme nom d'hôte.
Ceci est plus facile à configurer car vous n'aurez pas à configurer le service pour accepter les connexions à partir de l'adresse IP de votre conteneur Docker, et vous n'aurez pas à indiquer au conteneur Docker une adresse IP ou un nom d'hôte spécifique auquel se connecter, juste un port.
Par exemple, vous pouvez le tester en exécutant la commande suivante, qui suppose que votre image s'appelle my_image
, votre image inclut le telnet
et le service auquel vous souhaitez vous connecter est sur le port 25 :
docker run --rm -i -t --net=host my_image telnet localhost 25
Si vous envisagez de le faire de cette façon, veuillez consulter l'avertissement concernant la sécurité sur cette page :
https://docs.docker.com/articles/networking/
Il dit :
--net=host -- Indique à Docker de ne pas placer le conteneur à l'intérieur d'une pile réseau distincte. Essentiellement, ce choix indique à Docker de ne pas conteneuriser la mise en réseau du conteneur ! Alors que les processus de conteneur seront toujours confinés à leur propre système de fichiers, liste de processus et limites de ressources, une commande rapide ip addr vous montrera que, du point de vue du réseau, ils vivent "à l'extérieur" de l'hôte Docker principal et ont un accès complet à ses interfaces réseau. . Notez que cela ne permet pas au conteneur de reconfigurer la pile du réseau hôte - cela nécessiterait --privileged=true - mais cela permet aux processus du conteneur d'ouvrir des ports à faible numéro comme tout autre processus racine. Il permet également au conteneur d'accéder à des services de réseau local comme D-bus. Cela peut amener les processus du conteneur à faire des choses inattendues comme redémarrer votre ordinateur. Vous devez utiliser cette option avec prudence.
Votre hôte docker expose un adaptateur à tous les conteneurs. En supposant que vous êtes sur Ubuntu récent, vous pouvez exécuter
ip addr
Cela vous donnera une liste d'adaptateurs réseau, dont l'un ressemblera à quelque chose comme
3: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP
link/ether 22:23:6b:28:6b:e0 brd ff:ff:ff:ff:ff:ff
inet 172.17.42.1/16 scope global docker0
inet6 fe80::a402:65ff:fe86:bba6/64 scope link
valid_lft forever preferred_lft forever
Vous devrez dire à rabbit/mongo de se lier à cette IP (172.17.42.1). Après cela, vous devriez pouvoir ouvrir des connexions vers 172.17.42.1 depuis vos conteneurs.