Las redes virtuales en Docker son un canal de comunicación seguro y aislado, que permite a los contenedores intercambiar datos entre sí, con el sistema anfitrión o con el mundo exterior.
Tus aplicaciones, normalmente, necesitarán conectividad. Pero en el caso de Docker, estas aplicaciones viven dentro de contendores aislados.
Así que en Docker, la red no es un cable físico, si no un componente de software. En esta entrada vamos a aprender a utilizarlas.
El aislamiento por defecto
Lo primero que tenemos que recordar es que un contenedor es un entorno hermético, aislado de tu ordenador.
Cuando arrancas un contenedor, Docker le asigna:
- Su propia pila de red (Network Stack).
- Su propia dirección IP (privada e interna).
- Su propio rango de puertos (del 1 al 65535).
Esto significa que si tienes un contenedor corriendo Nginx en el puerto 80, ese puerto 80 es del contenedor.
No tiene nada que ver con el puerto 80 de tu ordenador (Host). De hecho, tu ordenador ni siquiera sabe que ese Nginx existe.
Para romper este aislamiento, de forma controlada, Docker utiliza Drivers de Red.
Los drivers de red
Docker tiene varios modos de conectar estas islas. Vamos a ver los tres fundamentales que vienen de serie y cubren el 95% de los casos de uso.
| Driver | Aislamiento | Rendimiento | Uso Recomendado |
|---|---|---|---|
| Bridge | 🟢 Alto (NAT) | 🟢 Bueno | Estándar. El 99% de tus contenedores. |
| Host | ❌ Nulo | 🟢 Nativo | Casos específicos de rendimiento o protocolos de red complejos. |
| None | 🟢 Total | ❌ N/A | Seguridad extrema / Trabajos aislados. |
Es el modo por defecto. Si no especificas nada, tu contenedor nace aquí.
Imagina un Switch virtual dentro de tu ordenador. Todos los contenedores se conectan a este switch.
- ✅ Entre ellos: Pueden hablarse si conocen sus IPs (o nombres, como veremos luego).
- ✅ Con el exterior: Usan tu ordenador como pasarela (NAT) para salir a Internet.
- ❌ Desde fuera: ¡Nadie puede entrar! Están protegidos detrás del NAT.
Es como la red WiFi de tu casa. Tus dispositivos tienen IPs privadas (192.168…) y salen a internet por el Router. Desde internet nadie puede acceder a tu impresora directamente a menos que configures el router.
Este es el driver que usaremos casi siempre, combinándolo con la publicación de puertos (-p) para dejar entrar tráfico selectivamente.
Este modo elimina el aislamiento de red. El contenedor comparte directamente la tarjeta de red de tu ordenador (Host).
Si el contenedor escucha en el puerto 80, está ocupando el puerto 80 real de tu tarjeta de red.
- Ventaja: Rendimiento máximo (no hay NAT ni capas intermedias).
- Desventaja: Solo puedes ejecutar un contenedor que use un puerto específico. No puedes tener dos Nginx en modo host porque ambos pelearían por el puerto 80 de tu PC.
docker run --network host nginx
El driver host funciona de forma nativa en Linux. En Docker Desktop para Windows y Mac, debido a la máquina virtual intermedia, este driver tiene limitaciones y no funciona exactamente igual (el puerto no se expone directamente a Windows).
Como su nombre indica: Sin red.
El contenedor tiene una interfaz de loopback (localhost) y ya está. No tiene cable de red. No puede salir a internet, no puede hablar con otros contenedores y nadie puede hablar con él.
¿Para qué sirve? Para tareas de máxima seguridad o procesos batch que solo necesitan procesar archivos locales y queremos garantizar que no filtran datos a internet.
Verlo en práctica
Vamos a usar nuestros comandos de gestión para ver qué redes tenemos ahora mismo en nuestro Docker. El comando es:
docker network ls
Deberías ver algo así:
NETWORK ID NAME DRIVER SCOPE
a1b2c3d4e5 bridge bridge local
f6g7h8i9j0 host host local
k1l2m3n4o5 none null local
Ahí están las tres que acabamos de explicar. Docker las crea automáticamente al instalarse.
Inspeccionando la red
Si quieres ver los detalles técnicos de la red bridge (por ejemplo, qué rango de IPs está usando o qué contenedores están conectados a ella), usamos el comando inspect:
docker network inspect bridge
Esto te devolverá un JSON enorme. No te asustes. Busca la sección "Containers". Si tienes algún contenedor corriendo, lo verás ahí con su IP interna asignada (normalmente del tipo 172.17.0.x).
El problema del Driver Bridge
El driver bridge es genial porque protege nuestros contenedores. Pero tiene un problema: Si están protegidos, ¿cómo veo mi página web desde el navegador?
Aquí es donde entra el concepto de Publicación de Puertos (Port Forwarding), esa famosa bandera -p 80:80 que hemos usado sin pensar. En el siguiente artículo vamos a entender qué hace realmente ese comando.
