primero hay que saber que es una red y un driver:
Red (Network): Es la instancia o subred aislada que creás para que tus contenedores se conecten entre sí y se comuniquen mediante IPs o nombres de host (por ejemplo: red_backend, red_frontend).
Driver de Red: Es el mecanismo o tecnología subyacente que define las reglas técnicas de cómo se encapsulan, aíslan y enrutan los paquetes de datos.
Analogía
- El driver es el tipo de transporte (ej. tren, avión, carretera).
- La red es la línea o ruta específica que construís usando esa tecnología (ej. “Línea A” o “Ruta 2”).

docker por defecto automáticamente crea las redes bridge, host, none, etc.. con los mismos drivers de ejemplo, se pueden ver en “docker network ls”

explicación buena:
https://www.youtube.com/watch?v=lQoh9gaEvvc&t=313s
En la mayoría de las casas u oficinas, los routers asignan IPs del rango 192.168.x.x o 10.0.x.x
Las IPs 172.17.x.x SÍ son privadas (pero poco populares)
el estándar de redes (RFC 1918) reserva tres rangos para redes privadas sin acceso directo desde internet:
10.0.0.0a10.255.255.255172.16.0.0a172.31.255.255(el rango que elige Docker)192.168.0.0a192.168.255.255
Docker usa por defecto la subred 172.17.0.0/16 para su red bridge
No es alcanzable desde otra computadora de tu casa (a menos que expongas puertos con -p)
Existe únicamente dentro de la interfaz virtual docker0 de la máquina donde corre el motor de Docker

para hablar desde un contenedor hacia tu sistema host real, no podés usar localhost ni la IP física directamente sin recurrir a nombres especiales como host.docker.internal
osea de un contenedor A q no expone sus puertos me puedo comunicar con un puerto del host anfitrion?
Sí. Exponer o mapear puertos (con -p o EXPOSE) solo es necesario para el tráfico entrante (de afuera hacia el contenedor). El tráfico saliente (del contenedor hacia afuera, ya sea internet o tu propia PC anfitriona) funciona por defecto sin configurar ningún puerto.
- La forma recomendada:
host.docker.internal- Docker incluye un nombre de dominio especial que apunta directamente a la IP del host anfitrión
- services:
- mi-app:
- image: mi-imagen
- extra_hosts:
- – “host.docker.internal:host-gateway”
- Es un nombre de dominio interno (DNS) especial creado por Docker para que un contenedor pueda comunicarse con servicios que están ejecutándose directamente en la máquina anfitriona (tu PC o servidor)
- es una palabra reservada de docker
- Si tenés un servicio corriendo nativamente en tu PC (por ejemplo, una base de datos en el puerto
5432o un backend en el puerto8080) y querés que un contenedor se conecte a él, no podés usarlocalhost. En su lugar, usáshost.docker.internal, que Docker traduce automáticamente a la IP del host dentro de la red virtual
continuación:
1 thought on “redes en docker”
Comments are closed.