GNU/Linux >> Tutoriels Linux >  >> Linux

Transférer le port hôte vers le conteneur Docker

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.


Linux
  1. Comment accéder à l'espace de noms réseau du conteneur Docker à partir de l'hôte

  2. Explorer le système de fichiers du conteneur Docker

  3. Exécution de docker sur Ubuntu :le volume hôte monté n'est pas accessible en écriture à partir du conteneur

  4. Démarrer un shell dans le conteneur Docker Alpine

  5. Quel est le PID dans l'hôte d'un processus exécuté dans un conteneur Docker ?

Comment se connecter à Localhost dans un conteneur Docker

Comment obtenir l'adresse IP d'un conteneur Docker à partir de l'hôte

Comment copier des fichiers entre l'hôte et le conteneur Docker

Comment se connecter en SSH à un conteneur Docker

Comment gérer les conteneurs Docker

Rendre un montage NFS sur l'hôte visible et en lecture-écriture dans le conteneur Docker