CodeGym /Cursos /Docker SELF /Depuración de aplicaciones en Docker Compose

Depuración de aplicaciones en Docker Compose

Docker SELF
Nivel 16 , Lección 3
Disponible

9.1 Herramientas y comandos para depuración

Docker Compose facilita enormemente el desarrollo y despliegue de aplicaciones multicontenedor, pero, como con cualquier tecnología, pueden surgir problemas que requieran depuración y solución. En esta lección, veremos los enfoques básicos y herramientas para encontrar errores y depurar aplicaciones en Docker Compose.

Problemas principales y enfoques para resolverlos:

  1. Problemas al iniciar los contenedores:
    • Verificación de logs de los contenedores.
    • Verificación del estado de los contenedores.
    • Verificación de los archivos de configuración.
  2. Problemas de red:
    • Verificación de conexiones de red.
    • Uso de utilidades de red dentro de los contenedores.
  3. Problemas con volúmenes:
    • Verificación del montaje de volúmenes.
    • Verificación de permisos de acceso a los volúmenes.

Herramientas y comandos para depuración:

1. Ver los logs de los contenedores

Los logs de los contenedores son el primer lugar al que deberías acudir si tienes problemas. El comando docker compose logs permite ver los logs de todos los servicios definidos en compose.yaml.

Terminal

docker compose logs

Puedes especificar un servicio en particular para ver sus logs:

Terminal

docker compose logs <service_name>

2. Verificación del estado de los contenedores

El comando docker compose ps muestra información sobre el estado de todos los contenedores gestionados por Docker Compose.

Terminal

docker compose ps

El resultado de este comando mostrará el estado, los puertos y las identificaciones de los contenedores.

3. Reiniciar contenedores

Si un contenedor no funciona correctamente, intenta reiniciarlo:

Terminal

docker compose restart <service_name>

4. Conectarse a un contenedor en ejecución

Para investigar más a fondo un problema, puedes conectarte a un contenedor en ejecución usando el comando docker compose exec.

Terminal

docker compose exec <service_name> /bin/bash

Este comando abrirá un terminal dentro del contenedor, lo que te permitirá ejecutar comandos de diagnóstico.

5. Uso de utilidades de red

Verificar las conexiones de red dentro de los contenedores puede ayudar a diagnosticar problemas de red. Puedes usar utilidades como ping, curl, netcat y otras.

Terminal

docker compose exec <service_name> ping <hostname>

docker compose exec <service_name> curl http://<hostname>

docker compose exec <service_name> netcat -z -v <hostname> <port>

9.2 Enfoques Avanzados

Enfoques adicionales para encontrar errores

1. Verificar archivo Docker Compose

Errores en el archivo compose.yaml pueden llevar a un funcionamiento incorrecto de los contenedores. Revisa el sintaxis del archivo con el siguiente comando:

Terminal

docker compose config

Este comando revisará el archivo para detectar errores y mostrará la configuración final.

2. Usar Healthcheck

Puedes definir un healthcheck para los servicios en compose.yaml, para que Docker compruebe automáticamente el estado de los contenedores.

Yaml

version: '3.8'

services:
  web:
    image: nginx:latest
    ports:
      - "80:80"
    healthcheck:
      test: ["CMD-SHELL", "curl -f http://localhost || exit 1"]
      interval: 30s
      timeout: 10s
      retries: 3

3. Verificar montajes de volúmenes

Los problemas con los volúmenes pueden ocurrir debido a un montaje incorrecto o permisos insuficientes. Asegúrate de que los volúmenes estén montados correctamente y que los contenedores tengan acceso a ellos.

Yaml

version: '3.8'

services:
  db:
    image: postgres:latest
    volumes:
      - db-data:/var/lib/postgresql/data

volumes:
  db-data:

3.1 Verificar disponibilidad del volumen

Para verificar la disponibilidad de un volumen desde un contenedor, puedes iniciar un contenedor y ejecutar un comando que compruebe la existencia del volumen (por ejemplo, listar los archivos en el volumen). Supongamos que el volumen está montado en el contenedor en la ruta /mnt/volume:

Terminal

docker run --rm -v my_volume:/mnt/volume alpine ls /mnt/volume

Si el volumen está disponible, el comando ls mostrará la lista de archivos y directorios en el volumen. Si el volumen no está disponible o está vacío, recibirás un mensaje correspondiente.

3.2 Verificar espacio disponible en el volumen

Para comprobar cuánto espacio está disponible en el volumen desde dentro del contenedor, usa el comando df:

Terminal

docker run --rm -v my_volume:/mnt/volume alpine df -h /mnt/volume

Este comando muestra el espacio disponible en el sistema de archivos donde está montado el volumen. La opción -h muestra la información en un formato legible (con unidades como MB, GB, etc.).

4. Usar IDE

Para simplificar la depuración, usa una IDE con funciones de debug y logging habilitadas. Puedes crear archivos de configuración separados para desarrollo y producción utilizando el parámetro --file.

Terminal

docker compose --file docker-compose.dev.yml up

¡Importante! Aquí tienes una instrucción útil para configurar la depuración remota de una aplicación ejecutada dentro de Docker, usando IntelliJ IDEA: Configuración de depuración remota .

5. Verificar variables de entorno

Variables de entorno incorrectas o ausentes pueden causar problemas. Asegúrate de que todas las variables necesarias estén definidas en el archivo .env o directamente en compose.yaml.

Yaml

version: '3.8'

services:
  app:
    image: myapp:latest
    environment:
      - APP_ENV=development
      - DEBUG=true

9.3 Ejemplos de comandos para depuración

Ejemplos de uso de comandos para depuración

Ejemplo 1: Comprobación y corrección de errores de conexión a la base de datos

Visualizar logs del servicio web:

Terminal

docker compose logs web

Verificar la conexión de red entre web y db:

Terminal

docker compose exec web ping db
docker compose exec web curl http://db:5432

Conectarse al contenedor web para diagnóstico:

Terminal

docker compose exec web /bin/bash

Ejemplo 2: Comprobación de problemas con volúmenes

Verificar el montaje de los volúmenes:

Yaml

version: '3.8'

services:
  db:
    image: postgres:latest
    volumes:
      - db-data:/var/lib/postgresql/data
    
volumes:
  db-data:

Conectarse al contenedor db y verificar los datos:

Terminal

docker compose exec db /bin/bash
ls -l /var/lib/postgresql/data
1
Опрос
Escalado de servicios,  16 уровень,  3 лекция
недоступен
Escalado de servicios
Escalado de servicios
Comentarios
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION