Tecnología que te entiende
Docker networking explicado: bridge, host, overlay y más
Docker

Docker networking explicado: bridge, host, overlay y más

20 May 2026 3 min de lectura 876 vistas

La red de Docker confunde a muchos principiantes — ¿por qué mi contenedor no puede hablar con otro? ¿Qué diferencia hay entre bridge, host y overlay? Esta guía explica cómo funciona el networking de Docker con ejemplos concretos.

Cómo funciona la red en Docker

Cuando instalas Docker, crea automáticamente tres redes: bridge, host y none. Por defecto, los contenedores se conectan a la red bridge estándar, pero esta tiene limitaciones importantes — los contenedores no pueden resolverse por nombre.

# Ver redes disponibles
docker network ls

# NETWORK ID     NAME      DRIVER    SCOPE
# abc123         bridge    bridge    local
# def456         host      host      local
# ghi789         none      null      local

Tipos de redes Docker

Driver Aislamiento Resolución DNS Cuándo usar
bridge (default) Solo por IP Evitar — usa redes custom
bridge (custom) Por nombre Desarrollo local, Compose
host No N/A Rendimiento máximo, Linux solo
overlay Por nombre Docker Swarm, múltiples hosts
none Total N/A Contenedores completamente aislados

Bridge personalizada: la forma correcta

Crear tu propia red bridge habilita DNS automático — los contenedores se encuentran por nombre. Es lo que usa Docker Compose internamente.

# Crear red personalizada
docker network create mi-red

# Conectar contenedores a esa red
docker run -d --name db --network mi-red mariadb:11

docker run -d --name app --network mi-red \
    -e DB_HOST=db \   # ← resuelve por nombre del contenedor
    mi-app:latest

# Ahora "app" puede llegar a "db" con solo usar el nombre "db"
docker exec app ping db

Publicar puertos: -p y --publish

# Publicar puerto 80 del contenedor en el 8080 del host
docker run -p 8080:80 nginx

# Publicar solo en localhost (más seguro)
docker run -p 127.0.0.1:8080:80 nginx

# Múltiples puertos
docker run -p 80:80 -p 443:443 nginx

# Puerto aleatorio del host
docker run -p 80 nginx
docker port <container_id>  # ver qué puerto asignó
⚠️ -p vs EXPOSE: EXPOSE en el Dockerfile es solo documentación — no abre ningún puerto en el host. Para acceder desde el host necesitas -p al correr el contenedor.

Networking en Docker Compose

Compose crea automáticamente una red bridge personalizada para cada proyecto y conecta todos los servicios a ella. Los servicios se alcanzan por su nombre de servicio:

services:
  web:
    build: .
    ports:
      - "80:80"
    networks:
      - frontend
      - backend

  app:
    image: mi-app:latest
    networks:
      - backend

  db:
    image: mariadb:11
    networks:
      - backend
    # NO expone puertos al host — solo accesible desde la red backend

networks:
  frontend:
  backend:
💡 Segmentación con Compose: En el ejemplo, web puede hablar con app y db. Pero db no es accesible desde internet — solo desde la red interna backend. Esta es la arquitectura correcta para no exponer la base de datos.

Diagnóstico de red

# Inspeccionar una red: ver qué contenedores están conectados
docker network inspect mi-red

# Ver la IP de un contenedor
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' mi-contenedor

# Probar conectividad entre contenedores
docker exec mi-app ping db
docker exec mi-app curl http://db:3306

# Ver puertos que expone un contenedor
docker port mi-contenedor
"En Docker, la red es invisible hasta que algo falla — entonces necesitas entenderla bien. Aprende primero, debuggea menos después."