Logs y Terminal

Por: Artiko
dokploylogsterminaldebugging

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:

  1. Abre el proyecto
  2. Selecciona la aplicacion
  3. 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

  1. Abre la aplicacion
  2. Ve a la pestana Terminal
  3. 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

CodigoSignificado
0Salida normal
1Error generico de la aplicacion
137Killed (OOM o SIGKILL)
139Segmentation fault
143SIGTERM (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:

  1. Verifica el consumo de memoria en Monitoring
  2. Aumenta el limite de memoria en Resources:
Memory Limit: 1024m  (sube de 512m a 1024m)
  1. 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:

  1. Ve a los logs de runtime para ver el error de salida
  2. Pausa los redeploys automaticos desde Settings > General
  3. Abre la terminal (si el contenedor vive lo suficiente)
  4. 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 —>