Agence web » Actualités du digital » Comment se connecter à Localhost dans un conteneur 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 communiquer avec 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

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

  • localhost et 127.0.0.1 – Ceux-ci se résolvent au récipient.
  • host.docker.internal – Cela se résout à l’hôte extérieur.

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 sur 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 hôte :

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

Les --add-host flag ajoute une entrée au conteneur /etc/hosts déposer. La valeur indiquée ci-dessus cartes host.docker.internal à la passerelle hôte du conteneur, qui correspond à la vraie localhost valeur. Tu pourrais 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 sur 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

Votre conteneur peut désormais 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 disposent généralement de leur propre réseau privé, distinct de la pile de l’hôte. Lorsque vous spécifiez --network=host, le conteneur hérite par défaut des paramètres de mise en réseau partagés 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 qu’il puisse être modifié avec le --hostname drapeau.

Le réseau hôte peut être un problème de sécurité qui brise le modèle d’isolement des conteneurs Docker. Cela peut toujours être utile dans les scénarios où vous êtes sûr que les conteneurs en cours d’exécution n’entreront pas en conflit les uns avec les autres ou ne causeront pas de problèmes dans votre environnement hôte. Le mode de mise en réseau de l’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ès à l’hôte avec le mode pont par défaut

Votre hôte est toujours accessible à partir de conteneurs par défaut bridge 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 Docker Engine représenteront l’hôte comme 172.17.0.1 par défaut docker0 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’IP Docker de votre hôte sera affiché sur le inet ligne. Connectez-vous à cette adresse IP depuis vos conteneurs pour accéder avec succès aux services exécutés sur votre hôte.

L’un des pièges de cette approche est que vous ne pourrez peut-être pas vous connecter à des services qui se lient directement à localhost. Vous devrez vous assurer que vos services écoutent les connexions sur votre IP de pont Docker, ainsi que localhost et 127.0.0.1. sinon tu verras connection refused ou des erreurs similaires dans votre conteneur.

Sommaire

Vous avez plusieurs options lorsque vous devez atteindre l’extérieur d’un conteneur Docker vers votre machine localhost. Si vous êtes sous Windows ou Mac, il est préférable d’utiliser le host.docker.internal alias. Les utilisateurs de Linux peuvent configurer quelque chose de similaire avec le --add-host flag 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 isolation réseau forte est requise.

S’en tenir au 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 un itinéraire vers votre hôte lorsque cela est nécessaire.

★★★★★