Ir al contenido

Conceptos 01 - Inspección y diagnóstico de redes

Cuando la conectividad entre servicios falla, Docker ofrece herramientas que permiten diagnosticar el problema de manera sistemática. Recorra cada sección para ver los comandos y procedimientos.

  • 5 secciones
  • 5 elementos interactivos
  • Autoevaluación final

Concepto 1 de 5

Comandos de inspección de redes

Herramientas para listar redes, inspeccionar su configuración y verificar el estado de los servicios.

Inspección de redes y servicios 4 comandos

Lista todas las redes disponibles en Docker.

docker network lsNETWORK ID    NAME                  DRIVER  SCOPEa1b2c3d4e5f6  mi-proyecto_default   bridge  localf7a8b9c0d1e2  mi-proyecto_backend   bridge  local

Concepto 2 de 5

Verificar resolución DNS desde un contenedor

Confirmar que un servicio puede resolver el nombre de otro servicio dentro de la red de Compose.

Tres formas de resolver un nombre 3 comandos

Opción 1: getent (si disponible en la imagen).

docker compose exec web getent hosts db172.20.0.2      db

Si la resolución falla, las causas más probables son las siguientes.

  • Los servicios no comparten una red.
  • El nombre del servicio está mal escrito.
  • El contenedor de destino no se encuentra en ejecución.

Concepto 3 de 5

Verificar si un puerto está abierto desde un contenedor

Confirmar que el servicio de destino acepta conexiones en el puerto esperado.

Ventana de terminal
$ docker compose exec web python -c "
import socket
s = socket.socket()
s.settimeout(3)
try:
s.connect(('db', 5432))
print('Conexión exitosa')
except Exception as e:
print(f'Error: {e}')
finally:
s.close()
"
Conexión exitosa

Cambia el estado del servicio db y observa qué capa falla en cada caso: la resolución del nombre o la conexión al puerto.

  1. 1Resolución DNS

    docker compose exec web getent hosts db
    172.20.0.2      db
  2. 2Conexión TCP a db:5432

    docker compose exec web python -c "…s.connect(('db', 5432))…"
    Error: [Errno 111] Connection refused

El nombre resuelve, pero nadie acepta conexiones en el puerto 5432 todavía: el motor sigue iniciando o no escucha en ese puerto.

Concepto 4 de 5

Inspeccionar la IP de un contenedor

Obtener la dirección IP asignada a un contenedor dentro de la red de Docker.

Ventana de terminal
$ docker inspect mi-proyecto-db-1 \
--format '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}'
172.20.0.2

Recrea el contenedor db varias veces y compara las dos cadenas de conexión.

Contenedormi-proyecto-db-1IP actual172.18.0.3Recreaciones0
docker compose up -d --force-recreate db
  • Con IP fijapostgresql://user:pass@172.18.0.3:5432/mydbConecta: la IP coincide con la de db.
  • Con nombre de serviciopostgresql://user:pass@db:5432/mydbConecta: db resuelve a 172.18.0.3.

Las direcciones que aparecen al recrear son ilustrativas. Docker puede asignar otra IP cada vez; lo que no garantiza es que se conserve.

Concepto 5 de 5

Flujo de diagnóstico resumido

Secuencia sistemática para diagnosticar problemas de conectividad entre servicios.

  1. ¿Están ambos contenedores en ejecución? docker compose ps para verificar estado.
  2. ¿Comparten la misma red? docker network inspect <red> para confirmar que ambos están conectados.
  3. ¿El nombre del servicio resuelve correctamente? docker compose exec <origen> getent hosts <destino>
  4. ¿El puerto del servicio destino está abierto? Prueba de conexión TCP con Python desde el contenedor origen.
  5. ¿Los logs muestran algún error específico? docker compose logs <servicio> para revisar errores de conexión o inicialización.

Elige una falla y ejecuta las verificaciones en orden. La primera que no se supera señala la causa.

  1. 1¿Están ambos contenedores en ejecución?

  2. 2¿Comparten la misma red?

  3. 3¿El nombre del servicio resuelve correctamente?

  4. 4¿El puerto del servicio destino está abierto?

  5. 5¿Los logs muestran algún error específico?

Pulsa el botón para ejecutar la primera verificación.

Autoevaluación

Comprueba lo que aprendiste

Cuatro preguntas rápidas para verificar las ideas clave de la lectura. Cada respuesta incluye una explicación.

  1. 1Dos servicios no logran comunicarse. ¿Cuál es el primer comando recomendado para revisar la red?
  2. 2getent hosts db devuelve una IP, pero la prueba TCP al puerto 5432 falla. ¿Qué es lo más probable?
  3. 3¿Por qué no conviene usar la IP de un contenedor en una cadena de conexión?
  4. 4En el flujo de diagnóstico, ¿qué se verifica justo después de confirmar que ambos contenedores están en ejecución?

0/4 respuestas correctas