Saltar al contenido principal
Node.js

Solución: EADDRINUSE — el puerto 3000 ya está en uso en Node.js

Node.js no puede arrancar porque el puerto ya está ocupado por otro proceso. Cómo encontrar y matar el proceso en Windows, Mac y Linux, y cómo evitarlo.

Error: Error: listen EADDRINUSE: address already in use :::3000

¿Por qué ocurre?

El puerto que intenta usar tu servidor (3000, 4000, 8080...) ya está siendo usado por otro proceso. Pasa cuando cierras el servidor con Ctrl+C pero el proceso no muere del todo, cuando tienes dos terminales corriendo el mismo proyecto, o cuando otra aplicación ocupa ese puerto.

Solución paso a paso

En Windows — encontrar y matar el proceso:

# Ver qué proceso usa el puerto 3000
netstat -ano | findstr :3000

# Verás algo como: # TCP 0.0.0.0:3000 0.0.0.0:0 LISTENING 12345 # El último número (12345) es el PID

# Matar el proceso por PID taskkill /PID 12345 /F

En Mac/Linux:

# Ver el proceso que ocupa el puerto
lsof -i :3000

# O con fuser fuser 3000/tcp

# Matar el proceso directamente kill -9 $(lsof -ti:3000)

Solución rápida — cambiar de puerto en tu app:

// En lugar de forzar el puerto 3000, usa otro o lee de variable de entorno
const PORT = process.env.PORT || 3001;
app.listen(PORT, () => console.log(Servidor en puerto ${PORT}));

En Next.js — arrancar en otro puerto:

npx next dev -p 3001

En Vite:

npx vite --port 3001

Cómo evitarlo en el futuro

Usa siempre `process.env.PORT` para configurar el puerto, nunca lo hardcodees. Añade un handler de señal para cerrar el servidor limpiamente: `process.on('SIGTERM', () => server.close())`.

Node.jsErrorpuertoservidor

¿Quieres que una IA te ayude? Genera el prompt perfecto para tu error:

Generador de Prompts

¿Necesitas desarrollo a medida?

Apps web, IA, módulos ERP — cuéntame tu proyecto.