## 🐳 Quand la fusion de rĂ©seaux [[Docker]] est un casse-tĂȘte et que vous avez besoin d'une communication "rapide" via les ports de l'hĂŽte {#sec-f27028c85270} Normalement, pour que les conteneurs communiquent entre eux, la mĂ©thode standard est de crĂ©er un rĂ©seau pont commun et d'appeler les services par leur nom (par exemple : `http://app-b:8080`). Cependant, il arrive parfois des situations imprĂ©vues oĂč il est difficile de suivre cette approche conventionnelle. ## Utilisez cette mĂ©thode dans les "situations dĂ©licates" suivantes {#sec-3da904d03848} * **Quand vous communiquez avec un service installĂ© directement sur l'hĂŽte :** Par exemple, si votre base de donnĂ©es ou Redis est installĂ© directement sur le systĂšme d'exploitation de l'hĂŽte et non dans un conteneur, rendant la fusion des rĂ©seaux impossible. * **Quand vous craignez de modifier les configurations rĂ©seau d'un conteneur créé par d'autres :** Si vous hĂ©sitez Ă  intĂ©grer de force votre conteneur dans une configuration rĂ©seau complexe que vous ne gĂ©rez pas, de peur de provoquer des pannes. * **Quand vous voulez vĂ©rifier une connexion 'temporaire' pendant le dĂ©veloppement local :** Lorsque la conception du rĂ©seau n'est pas la prioritĂ© et que vous devez simplement vĂ©rifier si les requĂȘtes atteignent un service exposĂ© via un port de l'hĂŽte. Dans ces cas-lĂ , l'astuce utile est `host.docker.internal`. ![Communication entre conteneurs via l'hĂŽte](/media/whitedec/blog_img/4e661ed1ddb648529e5b1681c022cd25.webp) --- ## La solution : Une "fenĂȘtre sur le monde extĂ©rieur au conteneur" : `host.docker.internal` {#sec-979a012d89c8} À l'intĂ©rieur d'un conteneur, appeler `127.0.0.1` ne fera rĂ©fĂ©rence qu'Ă  lui-mĂȘme. C'est lĂ  que l'utilisation du domaine spĂ©cial `host.docker.internal` permet de traverser les murs du conteneur pour trouver l'adresse IP de la machine hĂŽte. **Exemple de code Python (DRF) :** ```python # Utilisez 'host.docker.internal' au lieu de 'localhost' pour accĂ©der aux ports de l'hĂŽte. # Si App-B est liĂ© au port 8080 de l'hĂŽte, appelez-le comme suit. NEXTCLOUD_URL = "http://host.docker.internal:8080" response = requests.get(NEXTCLOUD_URL) ``` --- ## ⚠ Si vous ĂȘtes un utilisateur [[Linux]], une 'configuration manuelle' est indispensable {#sec-169e1a1f873c} Bien que cela fonctionne par dĂ©faut avec Docker Desktop (Mac/Windows), sur un **serveur Linux pur**, Docker ne configure pas ce domaine automatiquement. Vous devez explicitement dĂ©clarer que "ce domaine fait rĂ©fĂ©rence Ă  l'IP de l'hĂŽte" lors de la construction ou de l'exĂ©cution. **Exemple de configuration Docker Compose :** ```yaml services: drf-app: image: my-drf-app-image extra_hosts: # DĂ©claration pour accĂ©der Ă  la passerelle de l'hĂŽte sous le nom host.docker.internal - "host.docker.internal:host-gateway" ``` --- ## Ce n'est pas toujours la solution idĂ©ale {#sec-bb28e4a13c7f} Encore une fois, il est important de souligner que cette mĂ©thode est plutĂŽt un **dernier recours**. 1. **La meilleure approche :** CrĂ©er un rĂ©seau pont commun et communiquer via les noms des conteneurs (la plus sĂ©curisĂ©e). 2. **Raison d'utiliser cette mĂ©thode :** Quand vous devez accĂ©der Ă  un processus lancĂ© directement sur l'hĂŽte, ou dans un environnement 'isolĂ©' oĂč il est impossible d'intĂ©grer la structure rĂ©seau. ConsidĂ©rez cette 'issue de secours', rĂ©digĂ©e l'annĂ©e derniĂšre, comme une carte cachĂ©e Ă  n'utiliser que lorsque les mĂ©thodes conventionnelles sont bloquĂ©es !