Hasta ahora hemos trabajado con contenedores de forma aislada, pero las aplicaciones reales casi nunca viven solas: un servidor web necesita hablar con una base de datos, una API debe conectarse a una caché, y así sucesivamente. Para que los contenedores se comuniquen entre sí (y con el exterior) entra en juego el sistema de redes de Docker. En esta lección introductoria entenderás qué es una red en Docker, conocerás los tipos básicos disponibles, aprenderás los comandos esenciales para gestionarlas y verás un ejemplo sencillo de dos contenedores comunicándose. No te preocupes por los detalles más avanzados: aquí construiremos la base que necesitas para empezar.

¿Qué es una Red en Docker?

Cuando ejecutas un contenedor, Docker le asigna automáticamente una conexión de red, igual que un ordenador conectado a tu router recibe una dirección. Una red de Docker es un espacio virtual que permite a los contenedores:

  • Comunicarse entre sí (por ejemplo, que una API hable con su base de datos).
  • Comunicarse con el host (tu máquina).
  • Comunicarse con Internet o quedar aislados, según convenga.

Lo importante de partida es entender que Docker gestiona estas redes por ti de forma transparente. Cada contenedor obtiene su propia dirección IP dentro de una red, y Docker se encarga del enrutamiento.

Tipos Básicos de Red

Docker ofrece varios tipos de red (controlados por drivers). A nivel introductorio, basta con conocer los tres más importantes.

Tipo Descripción Cuándo usarlo
bridge Red privada interna; es la opción por defecto Comunicación entre contenedores en un host
host El contenedor comparte directamente la red del host Cuando necesitas máximo rendimiento de red
none El contenedor no tiene red (queda totalmente aislado) Procesos que no necesitan conectividad

La red bridge

Es la red por defecto. Cuando lanzas un contenedor sin indicar nada, se conecta a una red de tipo bridge. Docker crea un puente virtual en el host, y los contenedores conectados reciben una IP privada para comunicarse entre ellos.

Esta es la red que usarás en la mayoría de los casos cuando empieces.

La red host

Con este tipo, el contenedor no tiene una red propia: utiliza directamente la red de tu máquina. Si un servidor escucha en el puerto 80 dentro del contenedor, lo hará en el puerto 80 del host sin necesidad de -p.

docker run -d --network host nginx
  • --network host: el contenedor usa la red del host directamente.
  • Ofrece más rendimiento, pero pierde el aislamiento.

La red none

Desactiva por completo la conectividad del contenedor. Solo tendrá su interfaz interna (loopback). Es útil para tareas que no necesitan red.

docker run -d --network none alpine sleep 3600
  • --network none: el contenedor queda aislado, sin acceso a red.

Gestionar Redes con Comandos

Docker proporciona un conjunto de comandos sencillos para trabajar con redes.

Listar las redes existentes

docker network ls
  • Muestra todas las redes disponibles. Verás que Docker ya trae creadas por defecto bridge, host y none.

Crear una red propia

docker network create mi_red
  • docker network create: crea una nueva red.
  • mi_red: el nombre que le damos.
  • Por defecto, será una red de tipo bridge gestionada por el usuario.

Crear tus propias redes tiene una gran ventaja para principiantes: dentro de una red creada por ti, los contenedores pueden encontrarse por su nombre, sin necesidad de conocer sus direcciones IP. Esto simplifica enormemente la comunicación.

Conectar un contenedor a una red

docker network connect mi_red servidor_web
  • docker network connect: conecta un contenedor ya existente a una red.
  • mi_red: la red de destino.
  • servidor_web: el contenedor que queremos conectar.

También puedes indicar la red directamente al crear el contenedor con --network:

docker run -d --name servidor_web --network mi_red nginx
  • --network mi_red: el contenedor nace ya conectado a la red mi_red.

Otros comandos útiles

# Ver los detalles de una red (contenedores conectados, IPs...)
docker network inspect mi_red

# Desconectar un contenedor de una red
docker network disconnect mi_red servidor_web

# Eliminar una red que ya no se usa
docker network rm mi_red
  • docker network inspect: muestra la configuración de la red y qué contenedores están conectados.
  • docker network rm: elimina una red (siempre que no tenga contenedores conectados).

Ejemplo Práctico: Dos Contenedores que se Comunican

Veamos el caso más típico para un principiante: hacer que dos contenedores se "vean" entre sí. Usaremos una red propia para poder referirnos a ellos por nombre.

Paso 1: crear una red

docker network create red_demo
  • Creamos una red llamada red_demo donde conectaremos ambos contenedores.

Paso 2: lanzar el primer contenedor

docker run -d --name servidor --network red_demo nginx
  • Lanzamos un servidor Nginx llamado servidor, conectado a red_demo.

Paso 3: lanzar el segundo contenedor y probar la comunicación

docker run -it --rm --network red_demo alpine sh
  • Lanzamos un contenedor Alpine interactivo, también en red_demo.
  • --rm: se eliminará al salir.

Ya dentro del contenedor Alpine, comprobamos que podemos alcanzar al servidor por su nombre:

# Dentro del contenedor Alpine
ping servidor
  • ping servidor: Docker traduce el nombre servidor a su IP interna automáticamente, porque ambos contenedores están en la misma red creada por el usuario.
  • Si recibes respuesta, ¡los contenedores se comunican correctamente!

Este sencillo mecanismo (referirse a otro contenedor por su nombre dentro de una red propia) es la base de cómo se conectan los servicios en aplicaciones más complejas.

Errores Comunes y Consejos

  • Esperar comunicación por nombre en la red por defecto: en la red bridge por defecto, los contenedores NO se encuentran por nombre, solo por IP. Crea tu propia red para usar nombres.
  • Olvidar conectar ambos contenedores a la misma red: para que dos contenedores se comuniquen, deben compartir red.
  • Confundir red con publicación de puertos: las redes conectan contenedores entre sí; el flag -p expone un puerto hacia el host. Son cosas distintas.
  • Intentar eliminar una red en uso: docker network rm falla si quedan contenedores conectados. Desconéctalos primero.
  • Creer que localhost dentro del contenedor es el host: dentro de un contenedor, localhost se refiere a sí mismo, no a tu máquina.
  • Consejo: ponle nombres descriptivos a tus redes (red_app, red_backend) para entender de un vistazo qué conecta cada una.

Ejercicios

Ejercicio 1: explorar las redes por defecto

Lista las redes que Docker trae creadas por defecto e identifica las tres básicas (bridge, host y none).

Ejercicio 2: comunicación por nombre

Crea una red propia, lanza dos contenedores en ella (uno Nginx y uno Alpine) y comprueba desde el Alpine que puedes hacer ping al Nginx usando su nombre.

Ejercicio 3: limpiar una red

Crea una red, lanza un contenedor en ella, luego desconéctalo y elimina la red.

Soluciones

Solución 1

docker network ls

En la salida verás, entre otras, las redes bridge, host y none, que son las que Docker crea automáticamente.

Solución 2

docker network create red_practica
docker run -d --name web --network red_practica nginx
docker run -it --rm --network red_practica alpine sh
# Dentro del contenedor Alpine:
ping web

ping web funciona porque ambos contenedores comparten la red red_practica, donde Docker resuelve los nombres automáticamente.

Solución 3

docker network create red_temporal
docker run -d --name temporal --network red_temporal nginx

docker network disconnect red_temporal temporal
docker network rm red_temporal

Primero desconectamos el contenedor de la red y luego ya podemos eliminarla sin error.

Conclusión

En esta lección introductoria hemos descubierto el sistema de redes de Docker: qué es una red, los tres tipos básicos (bridge, host y none), los comandos esenciales para listarlas, crearlas, conectarlas y eliminarlas, y hemos visto un ejemplo práctico de dos contenedores comunicándose por nombre dentro de una red propia. Con esta base ya puedes conectar tus primeros servicios. Más adelante, en el Módulo 5, profundizaremos en los drivers avanzados, la resolución DNS interna y los patrones de aislamiento.

En la siguiente lección, Persistencia de Datos con Volúmenes, abordaremos otro pilar fundamental: cómo conseguir que los datos de tus contenedores no se pierdan cuando estos se eliminan.

© Copyright 2026. Todos los derechos reservados