Inicio > Cursos > Docker & Kubernetes > Docker Networking: conectando contenedores
Docker & KubernetesDocker FundamentosLección 4 de 12

Docker Networking: conectando contenedores

Docker crea redes virtuales para que los contenedores se comuniquen entre si. Por defecto, cada contenedor se conecta a una red bridge que le da acceso a internet, pero los contenedores en la red bridge por defecto NO se pueden comunicar por nombre.

Tipos de redes en Docker:

• bridge (default): Red aislada en el host. Los contenedores se comunican por IP, pero NO por nombre en la red default. • custom bridge: Red creada por ti. Los contenedores SI se resuelven por nombre (DNS automatico). • host: El contenedor comparte la red del host directamente. Sin aislamiento de puertos. • none: Sin red. Contenedor totalmente aislado.

# Listar redes existentes
docker network ls

# Crear una red custom
docker network create mi-red

# Ejecutar contenedores en la misma red custom
docker run -d --name api --network mi-red node:20-alpine sleep 3600
docker run -d --name db --network mi-red postgres:16-alpine

# Desde "api" puedes hacer ping a "db" por nombre!
docker exec api ping db
# Responde: PING db (172.18.0.3): 56 data bytes

# Conectar un contenedor existente a otra red
docker network connect mi-red contenedor-existente

# Desconectar de una red
docker network disconnect bridge contenedor-existente

# Inspeccionar una red (ver contenedores conectados)
docker network inspect mi-red

Port mapping (mapeo de puertos):

Cuando usas -p HOST:CONTENEDOR, Docker redirige trafico del puerto del host al contenedor.

• -p 8080:3000 → accedes en localhost:8080, llega al puerto 3000 del contenedor • -p 127.0.0.1:8080:3000 → solo accesible desde localhost (mas seguro) • -p 3000 → Docker asigna un puerto aleatorio del host

DNS entre contenedores: En una red custom, Docker ejecuta un DNS interno. Cada contenedor se registra con su --name como hostname. Asi "api" puede conectarse a "db:5432" sin conocer la IP.

# docker-compose.yml con redes personalizadas
version: "3.8"
services:
  frontend:
    image: nginx:alpine
    ports:
      - "80:80"
    networks:
      - frontend-net

  api:
    build: ./api
    ports:
      - "3000:3000"
    networks:
      - frontend-net
      - backend-net

  db:
    image: postgres:16-alpine
    networks:
      - backend-net

networks:
  frontend-net:
  backend-net:
# frontend NO puede hablar con db (redes separadas)
# api puede hablar con ambos (esta en las dos redes)
ConsejoNunca uses la red bridge por defecto en produccion. Siempre crea redes custom para tener DNS automatico y mejor aislamiento entre servicios.
← Docker Compose: multiples serviciosDocker en Produccion: builds y seguridad →

Practica esta lección

Resuelve los ejercicios del curso de Docker & Kubernetes en la app, gratis y con corrección automática.

Empezar a practicar