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
- Creado
script.pyen el directoriocron/ - Actualizado Dockerfiles para mejor logging con flag
-u(unbuffered output) - Mejorado healthcheck para no depender de wget/curl
📝 Archivos Corregidos
- ✅
cron/script.py- Creado - ✅
cron/Dockerfile- Actualizado con-uflag - ✅
engine/Dockerfile- Actualizado con-uflag - ✅
docker-compose.dokploy.yml- Healthcheck mejorado
🚀 Cómo Proceder en Dokploy
-
Commitea los cambios:
git add . git commit -m "Fix: Add missing script.py and improve Dockerfiles" git push -
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
-
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_perioda 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_PORTen 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.pyexiste encron/- 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:
- Service → Logs
- Activa "Follow" (auto-scroll)
- 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?
- Revisa logs completos: Service → Logs → Download
- Verifica configuración: Service → Settings
- 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