GNU/Linux >> Tutoriels Linux >  >> Panels >> Docker

Comment se connecter à Localhost dans un conteneur Docker

Lorsque vous travaillez avec Docker, vous conteneurisez généralement les services qui forment votre pile et utilisez la mise en réseau inter-conteneurs pour communiquer entre eux. Parfois, vous pourriez avoir besoin d'un conteneur pour parler à un service sur votre hôte qui n'a pas été conteneurisé. Voici comment accéder à localhost ou 127.0.0.1 depuis un conteneur Docker.

L'option facile

Docker Desktop 18.03+ pour Windows et Mac prend en charge host.docker.internal comme alias fonctionnel pour localhost . Utilisez cette chaîne dans vos conteneurs pour accéder à votre machine hôte.

  • localhost et 127.0.0.1 – Ceux-ci se résolvent dans le conteneur .
  • host.docker.internal – Cela résout l'hôte externe.

Si vous exécutez un serveur MySQL sur votre hôte, les conteneurs Docker peuvent y accéder en se connectant à host.docker.internal:3306 . C'est la technique la plus simple lorsque vous travaillez sur une machine Windows ou Mac.

Les utilisateurs de Docker Engine sous Linux peuvent activer host.docker.internal aussi via le --add-host drapeau pour docker run . Démarrez vos conteneurs avec cet indicateur pour exposer la chaîne d'hôte :

docker run -d --add-host host.docker.internal:host-gateway my-container:latest

Le --add-host flag ajoute une entrée au conteneur /etc/hosts dossier. La valeur indiquée ci-dessus correspond à host.docker.internal à la passerelle hôte du conteneur, qui correspond au vrai localhost valeur. Vous pouvez remplacer host.docker.internal avec votre propre chaîne si vous préférez.

Connexion au réseau hôte

Docker fournit un host réseau qui permet aux conteneurs de partager la pile réseau de votre hôte. Cette approche signifie localhost à l'intérieur d'un conteneur se résout à l'hôte physique, au lieu du conteneur lui-même.

Les conteneurs sont lancés avec le réseau hôte en ajoutant le --network=host drapeau :

docker run -d --network=host my-container:latest

Maintenant, votre conteneur peut référencer localhost ou 127.0.0.1 directement.

Si vous utilisez Docker Compose, modifiez la définition de service de votre conteneur pour inclure le network_mode champ :

services:
  my-service:
    network_mode: host

Il y a quelques mises en garde à cette approche. Il est important de considérer toutes les implications avant de l'utiliser. Les conteneurs ont généralement leur propre réseau privé, séparé de la pile de l'hôte. Lorsque vous spécifiez --network=host , le conteneur hérite par défaut des paramètres de réseau partagé de votre hôte.

Tous les ports exposés par le conteneur seront exposés sur l'hôte , même s'ils ne sont pas explicitement déclarés avec le -p drapeau. Le nom d'hôte par défaut du conteneur correspondra à celui de l'hôte, bien que cela puisse être modifié avec le --hostname drapeau.

Le réseau hôte peut être un problème de sécurité qui rompt le modèle d'isolation des conteneurs Docker. Cela peut toujours être utile dans les scénarios où vous êtes sûr que l'exécution de conteneurs n'entrera pas en conflit les uns avec les autres ou ne causera pas de problèmes dans votre environnement hôte. Le mode réseau hôte est également plus rapide que le mode pont par défaut car il n'y a pas de couche de virtualisation pour le trafic.

Accéder à l'hôte avec le mode pont par défaut

Votre hôte est toujours accessible à partir des conteneurs dans le bridge par défaut mode réseau. Il vous suffit de le référencer par son IP réseau Docker, au lieu de localhost ou 127.0.0.1 .

La plupart des installations de Docker Engine représenteront l'hôte sous la forme 172.17.0.1 sur le docker0 par défaut réseau de ponts. Vous pouvez vérifier votre propre IP en exécutant cette commande sur votre hôte :

ip addr show docker0

L'adresse IP Docker de votre hôte sera affichée sur inet doubler. Connectez-vous à cette adresse IP depuis vos conteneurs pour accéder avec succès aux services exécutés sur votre hôte.

Un écueil de cette approche est que vous ne pourrez peut-être pas vous connecter aux services qui se lient directement à localhost . Vous devrez vous assurer que vos services écoutent les connexions sur votre IP de pont Docker, ainsi que sur localhost et 127.0.0.1 . Sinon, vous verrez connection refused ou des erreurs similaires dans votre conteneur.

Résumé

Vous disposez de plusieurs options lorsque vous devez accéder à l'extérieur d'un conteneur Docker au localhost de votre machine. . Si vous êtes sur Windows ou Mac, il est préférable d'utiliser le host.docker.internal intégré alias. Les utilisateurs de Linux peuvent configurer quelque chose de similaire avec le --add-host indicateur lors du démarrage d'un conteneur.

Le mode réseau hôte est une alternative universelle qui permet aux conteneurs de partager la pile réseau de votre hôte. Vous pouvez référencer localhost directement, mais doivent rester conscients des risques et des limites. Ce n'est pas une option appropriée lorsqu'une forte isolation réseau est requise.

Le maintien du mode pont peut être la meilleure option pour les charges de travail qui le prennent en charge. Liez les services de votre hôte à son IP Docker, puis utilisez cette adresse pour vous connecter depuis votre conteneur. Cela vous permet d'utiliser la mise en réseau virtualisée par conteneur de Docker tout en fournissant une route vers votre hôte lorsque cela est nécessaire.


Docker
  1. Comment installer WordPress avec Docker

  2. Comment connecter des conteneurs Docker

  3. Comment se connecter en SSH à un conteneur Docker

  4. Comment installer Vim dans un conteneur Docker

  5. Comment quitter un conteneur Docker

Comment utiliser Docker Cp pour copier des fichiers entre l'hôte et les conteneurs

Comment exécuter PHPMyAdmin dans un conteneur Docker

Comment exécuter Grafana dans un conteneur Docker

Comment configurer un conteneur Apache Docker

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

Comment exécuter des conteneurs Docker