Solución de problemas de conectividad de contenedores
Puede omitir este paso si no tiene problemas de conectividad.
Ahora que entendemos cómo probar la conectividad entre contenedores, exploremos cómo solucionar los problemas de conectividad comunes.
Problemas de conectividad comunes
Al trabajar con redes de contenedores de Docker, es posible que encuentre varios problemas comunes:
- Contenedores en diferentes redes sin enrutamiento adecuado
- Configuraciones de firewall o grupos de seguridad que bloquean el tráfico
- Aplicación no escuchando en la IP/puerto esperado
- Errores de configuración de red
- Problemas de resolución DNS
Veamos los pasos de solución de problemas para cada uno de estos posibles problemas.
Verificación de la configuración de red
Primero, examinemos la configuración de red de nuestros contenedores:
## Muestre las interfaces de red de container1
docker exec container1 ip addr show
## Muestre las interfaces de red de container2
docker exec container2 ip addr show
La salida muestra todas las interfaces de red en cada contenedor. Cada red de Docker conectada aparece como una interfaz eth
con su dirección IP asignada.
Verificación de las rutas de red
Veamos la configuración de enrutamiento en nuestros contenedores:
docker exec container1 route -n
Esto muestra la tabla de enrutamiento para container1, indicando a dónde se dirige el tráfico de red.
Verificación de los puertos de escucha
Para determinar si una aplicación está escuchando adecuadamente las conexiones, use:
docker exec container2 netstat -tuln
Esto muestra todos los puertos de escucha TCP y UDP. Nuestro servidor HTTP debería estar escuchando en el puerto 8080.
Diagnóstico con tcpdump
Para un análisis más detallado del tráfico de red, podemos usar tcpdump
para capturar y analizar los paquetes:
## Instale tcpdump en container1
docker exec container1 apt-get install -y tcpdump dnsutils
## Capture paquetes durante 10 segundos
docker exec container1 timeout 10 tcpdump -i eth0 -n
Mientras esto está en ejecución, abra otra terminal y genere un poco de tráfico:
docker exec container1 ping -c 3 container2
Debería ver que los paquetes ICMP se capturan en la salida de tcpdump.
Verificación de la resolución DNS de Docker
Si tiene problemas con la resolución DNS entre contenedores:
## Verifique la configuración DNS
docker exec container1 cat /etc/resolv.conf
## Pruebe la resolución DNS
docker exec container1 nslookup container2
Simulación de un problema de red
Vamos a simular un problema de conectividad desconectando temporalmente container1 de nuestra red personalizada:
## Desconecte container1 de my-network
docker network disconnect my-network container1
## Intente hacer ping por nombre (esto debería fallar)
docker exec container1 ping -c 2 container2
Debería ver que el ping falla porque container1 ya no puede resolver container2 por nombre después de ser desconectado de la red compartida.
Vamos a reconectarlo:
## Vuelva a conectar container1 a my-network
docker network connect my-network container1
## Verifique que la conectividad se haya restaurado
docker exec container1 ping -c 2 container2
Ahora el ping debería funcionar nuevamente, demostrando cómo los contenedores deben estar en la misma red para que la resolución de nombres funcione.
Lista de verificación para la solución de problemas
Cuando enfrente problemas de conectividad de contenedores, siga esta lista de verificación:
- Verifique que los contenedores estén en ejecución:
docker ps
- Compruebe que estén en la misma red:
docker network inspect <network>
- Verifique que se hayan asignado direcciones IP:
docker inspect <container>
- Pruebe la conectividad básica (ping):
docker exec <container> ping <target>
- Compruebe que la aplicación esté escuchando:
docker exec <container> netstat -tuln
- Verifique que la resolución DNS funcione:
docker exec <container> nslookup <target>
- Busque problemas de firewall:
docker exec <container> iptables -L
- Compruebe los registros de los contenedores:
docker logs <container>
Utilizar este enfoque sistemático le ayudará a identificar y resolver la mayoría de los problemas de conectividad de contenedores.