Error EADDRINUSE / "puerto ya en uso": cómo resolverlo
Qué significa el error EADDRINUSE
El error EADDRINUSE (del inglés Error: Address already in use) ocurre cuando tu aplicación intenta "escuchar" (listen) en un puerto que ya está siendo utilizado por otro proceso. En Node.js, el mensaje suele ser parecido a Error: listen EADDRINUSE: address already in use :::3000.
En resumen: el puerto 3000 (o cualquier otro) ya está ocupado, y dos procesos no pueden usar el mismo puerto al mismo tiempo.
Por qué ocurre
- Iniciaste la aplicación dos veces sin cerrar la primera.
- Un proceso anterior se colgó y quedó "atrapado" reteniendo el puerto.
- Otra aplicación en el mismo servidor ya utiliza ese puerto.
- Definiste un puerto fijo en el código (ej.:
app.listen(3000)) en lugar de usar el puerto proporcionado por el entorno.
Cómo resolverlo en tu computadora (local)
1. Identifica el proceso que está utilizando el puerto
En Linux o macOS:
lsof -i :3000
En Windows:
netstat -ano | findstr :3000
2. Finaliza el proceso (reemplaza PID por el número que apareció)
En Linux o macOS: kill -9 PID
En Windows: taskkill /PID PID /F
La solución definitiva: usa el puerto del entorno
Definir un puerto fijo en el código es la causa más común de este problema en producción. En lugar de app.listen(3000), usa la variable de entorno PORT:
const port = process.env.PORT || 3000;
app.listen(port);
De este modo, el entorno de hospedaje define el puerto correcto automáticamente y el conflicto desaparece.
Cómo Square Cloud evita este problema
En Square Cloud, cada aplicación se ejecuta en un entorno aislado y dedicado; ningún otro proceso "roba" tu puerto. Solo basta con que tu aplicación respete la variable PORT y configures el puerto en el archivo squarecloud.app; el despliegue se encarga del resto.
Actualizado el: 12/06/2026
¡Gracias!
