Logs y Terminal
Logs y Terminal
Dokploy proporciona acceso a logs en tiempo real y una terminal integrada directamente desde el panel web. Estas herramientas son fundamentales para diagnosticar problemas sin necesidad de conectarte por SSH al servidor.
Logs en tiempo real de aplicaciones
Para ver los logs de una aplicacion:
- Abre el proyecto
- Selecciona la aplicacion
- Ve a la pestana Logs
Los logs se muestran en streaming, actualizandose automaticamente conforme la aplicacion genera nuevas entradas.
Controles de logs
La interfaz de logs ofrece:
[Play/Pause] - Pausar el streaming para leer con calma
[Clear] - Limpiar la pantalla de logs
[Download] - Descargar los logs visibles
[Lines: 100] - Cantidad de lineas a mostrar
[Search] - Buscar texto en los logs visibles
Filtrar logs
Puedes buscar texto especifico en los logs usando el campo de busqueda. Por ejemplo:
Buscar: "ERROR" -> Muestra solo lineas con errores
Buscar: "POST /api" -> Filtra requests POST a la API
Buscar: "timeout" -> Encuentra problemas de timeout
Logs de build vs logs de runtime
Dokploy separa los logs en dos categorias accesibles desde pestanas diferentes.
Logs de build
Se generan durante la construccion de la imagen. Muestran la salida del proceso de build:
[Build] Step 1/8: FROM node:20-alpine
[Build] Step 2/8: WORKDIR /app
[Build] Step 3/8: COPY package.json bun.lockb ./
[Build] Step 4/8: RUN npm install
[Build] npm warn deprecated [email protected]
[Build] added 847 packages in 23s
[Build] Step 5/8: COPY . .
[Build] Step 6/8: RUN npm run build
[Build] > [email protected] build
[Build] > vite build
[Build] vite v5.4.2 building for production...
[Build] dist/index.html 0.42 kB
[Build] dist/assets/app.js 145.23 kB
[Build] Step 7/8: FROM nginx:alpine
[Build] Step 8/8: COPY --from=0 /app/dist /usr/share/nginx/html
[Build] Successfully built abc123def456
Aqui diagnosticas errores de compilacion, dependencias faltantes y problemas de configuracion del Dockerfile.
Logs de runtime
Se generan mientras el contenedor esta corriendo. Muestran la salida estandar (stdout/stderr) de tu aplicacion:
[Runtime] Server listening on port 3000
[Runtime] Connected to database
[Runtime] GET /api/users 200 12ms
[Runtime] GET /api/products 200 8ms
[Runtime] POST /api/orders 201 45ms
[Runtime] ERROR: Connection refused to redis:6379
[Runtime] Retrying connection in 5s...
Terminal integrada
La terminal integrada permite ejecutar comandos dentro del contenedor en ejecucion, equivalente a hacer docker exec -it <container> sh.
Acceder a la terminal
- Abre la aplicacion
- Ve a la pestana Terminal
- Se abre una sesion de shell dentro del contenedor
# Ya estas dentro del contenedor
/app $ ls
Dockerfile node_modules package.json src dist
/app $ node -v
v20.11.0
/app $ cat /etc/os-release
NAME="Alpine Linux"
VERSION_ID=3.19.0
Comandos utiles en la terminal
Verificar que la aplicacion responde:
wget -qO- http://localhost:3000/health
# {"status":"ok"}
Ver variables de entorno cargadas:
env | sort
# DATABASE_URL=postgresql://...
# NODE_ENV=production
# PORT=3000
Verificar conectividad con otros servicios:
# Probar conexion a base de datos
nc -zv db 5432
# db (172.18.0.3:5432) open
# Probar conexion a Redis
nc -zv redis 6379
# redis (172.18.0.4:6379) open
Ver procesos corriendo:
ps aux
# PID USER COMMAND
# 1 node node dist/server.js
Verificar uso de disco dentro del contenedor:
df -h
du -sh /app/node_modules
# 245M /app/node_modules
Seleccionar servicio en terminal (Docker Compose)
Cuando tu aplicacion usa Docker Compose con multiples servicios, la terminal te permite seleccionar en cual contenedor abrir la sesion.
Al abrir la terminal, aparece un selector:
Select service:
[api] (running)
[worker] (running)
[db] (running)
[redis] (running)
Selecciona el servicio que necesitas inspeccionar. Por ejemplo, si el worker no esta procesando jobs, abre la terminal en worker para diagnosticar.
Ejemplo practico
Si tienes un docker-compose con:
services:
api:
build: ./api
ports:
- "3000:3000"
worker:
build: ./worker
command: node worker.js
db:
image: postgres:16-alpine
Puedes abrir terminal en cada uno:
En api:
/app $ curl localhost:3000/health
{"status":"ok"}
En worker:
/app $ node -e "console.log(process.env.QUEUE_URL)"
redis://redis:6379
En db:
/ $ psql -U postgres -d myapp -c "SELECT count(*) FROM users;"
count
-------
142
Estado de contenedores en logs (v0.27+)
A partir de la version 0.27, los logs muestran informacion adicional sobre el estado del contenedor, incluyendo reinicios y cambios de estado.
Indicadores de estado
[Container] Status: running (healthy)
[Container] Restarts: 0
[Container] Started: 2026-02-28T10:15:00Z
[Container] Health: passing (last check 5s ago)
Si un contenedor se reinicia, los logs lo registran:
[Container] Status changed: running -> restarting
[Container] Exit code: 137 (OOMKilled)
[Container] Status changed: restarting -> running
[Container] Restart count: 1
Codigos de salida comunes
| Codigo | Significado |
|---|---|
| 0 | Salida normal |
| 1 | Error generico de la aplicacion |
| 137 | Killed (OOM o SIGKILL) |
| 139 | Segmentation fault |
| 143 | SIGTERM (apagado graceful) |
Debugging comun
App no inicia
Si la aplicacion no arranca despues del deploy, revisa los logs de runtime:
[Runtime] Error: Cannot find module '/app/dist/server.js'
Causa: el build no genero los archivos esperados. Revisa los logs de build y el comando de start.
[Runtime] Error: listen EADDRINUSE :::3000
Causa: otro proceso ya usa el puerto. Verifica que el puerto configurado en Dokploy coincide con el que tu aplicacion escucha.
[Runtime] Error: connect ECONNREFUSED 172.18.0.3:5432
Causa: la base de datos no esta lista o el hostname es incorrecto. Verifica que el servicio de base de datos esta corriendo y usa el nombre correcto.
Build falla
Errores comunes en el build:
[Build] npm ERR! Could not resolve dependency:
[Build] npm ERR! peer typescript@">=4.7" from @astrojs/[email protected]
Solucion: actualiza la dependencia conflictiva o ajusta las versiones en package.json.
[Build] COPY failed: file not found in build context
Solucion: verifica que el archivo existe en el repositorio y que el .dockerignore no lo excluye.
[Build] RUN npm run build
[Build] sh: vite: not found
Solucion: asegurate de que las devDependencies se instalan durante el build. No uses npm install --production antes de buildear.
OOM (Out of Memory)
Si tu aplicacion se reinicia con exit code 137:
- Verifica el consumo de memoria en Monitoring
- Aumenta el limite de memoria en Resources:
Memory Limit: 1024m (sube de 512m a 1024m)
- Si el problema persiste, busca memory leaks en tu aplicacion:
# En la terminal del contenedor (Node.js)
node --max-old-space-size=1024 dist/server.js
# Verificar heap usage
node -e "console.log(process.memoryUsage())"
# {
# rss: 52428800,
# heapTotal: 18874368,
# heapUsed: 16777216,
# external: 1048576
# }
Contenedor en restart loop
Si el contenedor se reinicia constantemente:
- Ve a los logs de runtime para ver el error de salida
- Pausa los redeploys automaticos desde Settings > General
- Abre la terminal (si el contenedor vive lo suficiente)
- Corrige el problema y redespliega
Si el contenedor muere demasiado rapido para abrir terminal, revisa desde SSH:
# En el servidor host
docker logs <container-id> --tail 50
docker inspect <container-id> | grep -A 5 "State"
Anterior: Capitulo 19: Monitoring | Siguiente: Capitulo 21: Docker Swarm —>