Files
Onedrive/TROUBLESHOOTING.md

4.9 KiB

🔧 Solución de Problemas - Dokploy

Error: [Errno 2] No such file or directory

Causa

El Dockerfile intentaba copiar script.py pero el archivo no existía en el directorio cron/.

Solución Aplicada

  1. Creado script.py en el directorio cron/
  2. Actualizado Dockerfiles para mejor logging con flag -u (unbuffered output)
  3. Mejorado healthcheck para no depender de wget/curl

📝 Archivos Corregidos

  • cron/script.py - Creado
  • cron/Dockerfile - Actualizado con -u flag
  • engine/Dockerfile - Actualizado con -u flag
  • docker-compose.dokploy.yml - Healthcheck mejorado

🚀 Cómo Proceder en Dokploy

  1. Commitea los cambios:

    git add .
    git commit -m "Fix: Add missing script.py and improve Dockerfiles"
    git push
    
  2. En Dokploy UI:

    • Ve a tu proyecto
    • Clic en "Rebuild & Deploy" (no solo "Deploy")
    • Esto forzará rebuild de las imágenes con los nuevos archivos
  3. Verifica los logs:

    • Service → Logs
    • Deberías ver: "Running initial test..."

🔍 Otros Problemas Comunes

1. Build Context Incorrecto

Síntoma: Cannot find Dockerfile o No such file or directory durante build

Solución:

  • En Dokploy: Build Path debe ser ./ (raíz del repo)
  • Compose File Path: docker-compose.dokploy.yml

2. Variables de Entorno No Cargadas

Síntoma: Servicios inician pero fallan al conectarse

Solución:

  • Verifica que TODAS estas variables estén configuradas:
    E5_CLIENT_ID
    E5_CLIENT_SECRET
    E5_REFRESH_TOKEN
    WEB_APP_PASSWORD
    E5_WEB_APP_PASSWORD
    CRON_PASSWORD
    CRON_REFRESH_TOKEN
    

3. Healthcheck Falla

Síntoma: El servicio se reinicia constantemente

Solución:

  • Aumenta start_period a 60s o más
  • Verifica que el puerto 8080 esté correcto
  • Revisa logs para errores de inicio

4. odcron No Puede Conectarse a odengin

Síntoma: Logs de cron muestran "Connection refused"

Solución:

  • Verifica que ambos servicios estén en la misma red
  • IP debe ser odengin:8080 (nombre del servicio, no localhost)
  • Espera a que el healthcheck de odengin pase

5. Puerto Ya en Uso

Síntoma: Address already in use o port is already allocated

Solución:

  • Cambia ENGINE_PORT en variables de entorno
  • O elimina el puerto y usa dominios de Dokploy

📊 Checklist de Deploy Exitoso

Antes de hacer deploy:

  • Todos los archivos están en Git y pusheados
  • script.py existe en cron/
  • Dockerfiles tienen CMD ["python", "-u", ...]
  • Variables de entorno configuradas en Dokploy UI
  • Build Path: ./
  • Compose File: docker-compose.dokploy.yml

Después del deploy:

  • Ambos servicios muestran estado "Running"
  • Healthcheck pasa (ícono verde)
  • Logs de odengin muestran inicio exitoso
  • Logs de odcron muestran "Running initial test..."
  • No hay errores de conexión en logs

🔬 Debug Avanzado

Ver Logs en Tiempo Real

En Dokploy UI:

  1. Service → Logs
  2. Activa "Follow" (auto-scroll)
  3. Busca por "error", "exception", "failed"

SSH al Contenedor

# Desde Dokploy UI: Service → Terminal
# O desde SSH del servidor:
docker exec -it <container-name> /bin/bash

# Verificar archivos
ls -la /app

# Verificar proceso Python
ps aux | grep python

# Test manual del script
cd /app
python -u script.py

Verificar Red Docker

# Listar redes
docker network ls | grep onedrive

# Inspeccionar red
docker network inspect <network-name>

# Verificar que ambos contenedores estén en la red

Test de Conectividad

# Desde el contenedor odcron
docker exec -it <odcron-container> /bin/bash
ping odengin
wget -O- http://odengin:8080

💡 Tips Pro

1. Unbuffered Output

La flag -u en Python es crucial para Dokploy:

CMD ["python", "-u", "script.py"]

Sin ella, los logs pueden no aparecer en tiempo real.

2. Healthcheck Realista

El healthcheck actual usa Python nativo (siempre disponible):

test:
  [
    "CMD-SHELL",
    'python -c ''import urllib.request; urllib.request.urlopen("http://localhost:8080")'' || exit 1',
  ]

3. Start Period Generoso

Dale tiempo al servicio de iniciar:

start_period: 60s # 60 segundos antes de empezar healthchecks

4. Logs Estructurados

El script usa logging de Python:

logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')

Esto hace los logs más legibles en Dokploy.


📞 Necesitas Más Ayuda?

  1. Revisa logs completos: Service → Logs → Download
  2. Verifica configuración: Service → Settings
  3. Rebuild limpio: Service → "Clear Build Cache" → Rebuild

Si el problema persiste, comparte:

  • Logs completos (últimas 50 líneas)
  • Variables de entorno configuradas (sin valores sensibles)
  • Output del build