## 馃惓 Cuando integrar redes [[Docker]] es engorroso y necesitas una comunicaci贸n 'r谩pida' a trav茅s del puerto del host {#sec-f27028c85270} Normalmente, la forma est谩ndar de comunicar contenedores es creando una red puente compartida y llam谩ndolos por su nombre de servicio (ej: `http://app-b:8080`). Sin embargo, en la vida real, a veces surgen 'situaciones inevitables' que nos impiden seguir el protocolo. ## Usa este m茅todo en estas 'situaciones complicadas' {#sec-3da904d03848} * **Cuando necesitas comunicarte con servicios instalados directamente en el host:** Por ejemplo, si tu base de datos o Redis est谩n en el sistema operativo del host y no en un contenedor, imposibilitando la integraci贸n de redes. * **Cuando te da miedo tocar la configuraci贸n de red de un contenedor ajeno:** Si temes causar problemas al forzar tu contenedor en una configuraci贸n de red compleja que no administras. * **Cuando solo quieres verificar una conexi贸n 'temporalmente' durante el desarrollo local:** Si necesitas comprobar r谩pidamente si las solicitudes llegan a un servicio expuesto en un puerto del host, sin preocuparte por el dise帽o de la red. En estos casos, el truco 煤til es `host.docker.internal`. ![Comunicaci贸n entre contenedores usando el host](/media/whitedec/blog_img/4e661ed1ddb648529e5b1681c022cd25.webp) --- ## La soluci贸n: `host.docker.internal`, la "ventana al mundo exterior del contenedor" {#sec-979a012d89c8} Desde dentro de un contenedor, llamar a `127.0.0.1` solo te mostrar谩 a ti mismo (el contenedor). Sin embargo, al usar el dominio especial `host.docker.internal`, puedes atravesar la barrera del contenedor y encontrar la IP de la m谩quina anfitriona. **Ejemplo de c贸digo Python (DRF):** ```python # Usa 'host.docker.internal' en lugar de 'localhost' para salir al puerto del host. # Si App-B est谩 vinculado al puerto 8080 del host, se llama de la siguiente manera. NEXTCLOUD_URL = "http://host.docker.internal:8080" response = requests.get(NEXTCLOUD_URL) ``` --- ## 鈿狅笍 Para usuarios de [[Linux]], la 'configuraci贸n manual' es esencial {#sec-169e1a1f873c} Mientras que Docker Desktop (Mac/Windows) lo incluye por defecto, en un **servidor Linux puro**, Docker no configura este dominio autom谩ticamente. Es necesario especificar durante la construcci贸n o ejecuci贸n que "este dominio se refiere a la IP del host". **Ejemplo de configuraci贸n de Docker Compose:** ```yaml services: drf-app: image: my-drf-app-image extra_hosts: # Declaraci贸n para acceder al gateway del host con el nombre host.docker.internal - "host.docker.internal:host-gateway" ``` --- ## No siempre es la soluci贸n ideal {#sec-bb28e4a13c7f} Reitero, este m茅todo es m谩s bien un **煤ltimo recurso**. 1. **La mejor opci贸n:** Crear una red puente compartida y comunicar los contenedores por su nombre (lo m谩s seguro). 2. **Razones para usarlo:** Cuando necesitas acceder a procesos que se ejecutan directamente en el host o en entornos 'aislados' donde la estructura de red es imposible de integrar. Considera este 'salvavidas' que anot茅 el a帽o pasado como una carta oculta, solo para cuando los m茅todos est谩ndar no sean posibles.