CodeGym /Cursos /Docker SELF /Resolviendo problemas de red

Resolviendo problemas de red

Docker SELF
Nivel 18 , Lección 2
Disponible

8.1 Pasos principales para diagnosticar problemas de red

Los problemas de red en Docker pueden aparecer por varias razones, incluyendo una configuración incorrecta de redes, problemas con el DNS, conflictos de direcciones IP y otros más. En esta lección vamos a revisar los métodos principales para diagnosticar y resolver problemas de red en Docker.

Si tienes problemas de red, deberías seguir estos pasos:

  1. Verifica el estado de los contenedores y las redes
  2. Usa herramientas de red dentro de los contenedores
  3. Revisa la configuración de Docker y los archivos de red
  4. Consulta los registros del sistema de Docker
  5. Utiliza comandos de red de Docker

8.2 Verificación del estado de contenedores y redes

El primer paso para diagnosticar problemas de red es verificar el estado de los contenedores y redes.

Verificación del estado de los contenedores

Primero, vamos a listar todos los contenedores en ejecución. Para esto usamos el comando docker ps:

Terminal

docker ps

Si los contenedores no están en ejecución, esto podría indicar problemas con Docker mismo o con la configuración de los contenedores.

Verificación de las redes

El comando docker network ls lista todas las redes creadas en Docker:

Terminal

docker network ls

Asegúrate de que la red necesaria existe y que los contenedores están conectados a ella.

8.3 Uso de utilidades de red dentro de contenedores

Las utilidades de red, como ping, curl, netcat (o nc), y nslookup, pueden ayudarte a diagnosticar problemas dentro de contenedores. Cada una de estas utilidades realiza una tarea específica:

  • ping — utilidad para verificar la accesibilidad de hosts remotos en la red enviándoles solicitudes ICMP.
  • curl — herramienta para transferir datos a través de varios protocolos, a menudo utilizada para verificar la accesibilidad de servicios web.
  • netcat (nc) — herramienta universal para trabajar con conexiones de red, permite crear conexiones TCP/UDP y diagnosticar la disponibilidad de puertos.
  • nslookup — utilidad para buscar información sobre registros DNS, por ejemplo, para verificar la resolución de nombres de contenedores.

Ejemplo de uso de ping

Conéctate al contenedor y verifica la conexión con otro contenedor o servicio usando la utilidad ping para enviar solicitudes ICMP:

Terminal

docker exec -it <container_name> ping <target_container_name_or_ip>

Ejemplo de uso de curl

Verifica la accesibilidad de un servicio web dentro del contenedor con la utilidad curl:

Terminal

docker exec -it <container_name> curl http://<target_service>

Ejemplo de uso de nslookup

Usa nslookup para verificar la resolución de nombres DNS de contenedores, lo que es útil para diagnosticar problemas con servicios de red:

Terminal

docker exec -it <container_name> nslookup <target_container_name>

Ejemplo de uso de nc host port

La utilidad nc se utiliza para depurar y diagnosticar conexiones de red. Con el comando nc host port puedes establecer una conexión con un host y puerto específicos, verificando la disponibilidad del puerto en el host de destino:

Terminal

docker exec -it <container_name> nc -zv 192.168.1.1 22

8.4 Verificación de la configuración de Docker y archivos de red

Configuraciones incorrectas de Docker y archivos de red pueden causar problemas de red.

Verificación del archivo docker-compose.yml

Asegúrate de que el archivo docker-compose.yml esté configurado correctamente, y que todas las redes, servicios y puertos estén indicados de manera adecuada.

Yaml

version: '3.8'

services:
  web:
    image: nginx:latest
    ports:
      - "80:80"
    networks:
      - webnet
        
  db:
    image: postgres:latest
    ports:
      - "5432:5432"
    networks:
      - webnet
        
networks:
  webnet:
    driver: bridge

Verificación del archivo /etc/docker/daemon.json

Revisa la configuración de Docker Daemon si esta ha sido modificada:

JSON

{
  "dns": ["8.8.8.8", "8.8.4.4"],
  "fixed-cidr": "192.168.1.0/24"
}

8.5 Revisión de los registros del sistema Docker

Los registros del sistema Docker pueden contener información útil sobre errores y problemas de red.

Revisando los registros de Docker

Usa el comando journalctl para revisar los registros de Docker en sistemas con systemd:

Terminal

journalctl -u docker.service

Revisando los logs de los contenedores

Los logs de los contenedores también pueden ayudar a diagnosticar problemas de red:

Terminal

docker logs <container_name>

8.6: Uso de comandos de red en Docker

Docker ofrece comandos para diagnosticar y gestionar redes, como docker network inspect y docker network connect.

Comando docker network inspect

Este comando permite obtener información detallada sobre la red, incluyendo los contenedores conectados y ajustes de IPAM.

Terminal

docker network inspect <network_name>

Ejemplo del output del comando docker network inspect

JSON

[
    {
        "Name": "webnet",
        "Id": "e5e5e1b1a3e5",
        "Created": "2021-01-01T00:00:00.000000000Z",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": {},
            "Config": [
                {
                    "Subnet": "172.18.0.0/16",
                    "Gateway": "172.18.0.1"
                }
            ]
        },
        "Containers": {
            "container_id": {
                "Name": "web",
                "EndpointID": "6c52f8c75c1e",
                "MacAddress": "02:42:ac:11:00:02",
                "IPv4Address": "172.18.0.2/16",
                "IPv6Address": ""
            }
        },
        "Options": {},
        "Labels": {}
    }
]

Comando docker network connect

Si un contenedor no está conectado correctamente a la red, puedes conectarlo manualmente:

Terminal

docker network connect <network_name> <container_name>

8.7 Ejemplos de diagnóstico y solución de problemas

Ejemplo 1: Problemas con la conversión de nombres de dominio DNS a IP

Si los contenedores no pueden convertir los nombres hosts de otros contenedores, revisa la configuración del DNS:

Revisar la configuración del DNS en docker-compose.yml:

Yaml

version: '3.8'

services:
  web:
    image: nginx:latest
    dns:
      - 8.8.8.8

Revisar DNS dentro del contenedor:

Terminal

docker exec -it <container_name> cat /etc/resolv.conf

Ejemplo 2: Problemas con el acceso a servicios

Si los contenedores no pueden acceder a los servicios en otros hosts:

Revisar los puertos publicados:

Terminal

docker ps

Revisar las reglas del firewall:

Asegúrate de que las reglas del firewall no bloquean los puertos necesarios.

Ejemplo 3: Conflicto de direcciones IP

Si tienes un conflicto de direcciones IP entre los contenedores o con el host:

Revisar la subred de la red:

Terminal

docker network inspect <network_name>

Cambiar la subred:

Terminal

docker network create --subnet=192.168.2.0/24 my_network
Comentarios
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION