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:
- 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.
- Problemas de red:
- Verificación de conexiones de red.
- Uso de utilidades de red dentro de los contenedores.
- 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
.
docker compose logs
Puedes especificar un servicio en particular para ver sus logs:
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.
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:
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
.
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.
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:
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.
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.
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:
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
:
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
.
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
.
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
:
docker compose logs web
Verificar la conexión de red entre web
y db
:
docker compose exec web ping db
docker compose exec web curl http://db:5432
Conectarse al contenedor web
para diagnóstico:
docker compose exec web /bin/bash
Ejemplo 2: Comprobación de problemas con volúmenes
Verificar el montaje de los volúmenes:
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:
docker compose exec db /bin/bash
ls -l /var/lib/postgresql/data
GO TO FULL VERSION