localhost:3000: qué es y cómo arreglar conexión rechazada o puerto en uso | We.Inc
Qué significa localhost:3000, qué servidores de desarrollo usan el puerto 3000 por defecto y los comandos de Mac, Linux y Windows que solucionan los errores de conexión rechazada y de dirección ya en uso.
localhost:3000 es un servidor web que se ejecuta en tu propio ordenador y escucha en el puerto 3000. Next.js, el ejemplo hello world de Express y Rails usan ese puerto por defecto. Si la página rechaza la conexión, no hay nada escuchando ahí. Si el servidor no arranca, otro proceso ya ocupa el puerto, y puedes encontrarlo y detenerlo.
¿Qué error tienes?
Lo que ves
Qué significa
Lo primero que puedes probar
Navegador: localhost rechazó la conexión
No hay nada escuchando en el puerto 3000
Arranca el servidor de desarrollo y lee la URL que muestra
Terminal: EADDRINUSE :::3000
Otro proceso ya usa el puerto 3000
Busca ese proceso y detenlo, o usa otro puerto
La página carga, pero aparece una app antigua
Sigue en marcha el servidor de otro proyecto
Detenlo y vuelve a arrancar el correcto
localhost siempre significa esta máquina, y el número que va después de los dos puntos elige con qué programa de ella hablas. Casi todos los problemas con el puerto 3000 vienen de uno de dos problemas opuestos: no hay ningún servidor ahí, o dos servidores lo quieren a la vez. Escribe un puerto abajo para obtener los comandos de tu sistema.
Introduce el número de puerto que usa tu app. Por defecto es 3000.
Copia el comando de búsqueda de tu sistema y ejecútalo en un terminal para ver qué proceso está escuchando.
Detén ese proceso con el segundo comando, o arranca tu app en otro puerto.
Si no hay nada escuchando, revisa la tabla de puertos por defecto para asegurarte de que tu herramienta usa realmente el 3000.
Lee la URL que muestra el servidor de desarrollo al arrancar. Vite, por ejemplo, usa el 5173 y pasa al siguiente puerto libre si ese está ocupado.
Detén los servidores de desarrollo con Ctrl+C en su terminal en lugar de cerrar la ventana, lo que puede dejar el proceso en marcha.
Usa http, no https, salvo que hayas arrancado el servidor con HTTPS a propósito; Next.js solo sirve HTTPS en local con --experimental-https.
Dentro de Docker, la app debe escuchar en 0.0.0.0 y el puerto debe estar publicado, o localhost en la máquina anfitriona rechazará la conexión.
Preguntas frecuentes
¿Qué es localhost:3000?
localhost es el nombre de tu propio ordenador, normalmente 127.0.0.1 o ::1, y 3000 es un número de puerto. Juntos apuntan a un servidor que se ejecuta en local, casi siempre un servidor de desarrollo de una app web. Nadie más en internet puede abrir tu URL de localhost.
¿Por qué localhost:3000 dice que rechazó la conexión?
Ningún programa está aceptando conexiones en ese puerto. Puede que el servidor de desarrollo no esté en marcha, que se haya caído con un error o que esté escuchando en otro puerto, como el 5173. Revisa el terminal donde lo arrancaste.
¿Cómo soluciono que el puerto 3000 ya esté en uso?
Busca el proceso que ocupa el puerto con lsof en Mac o Linux, o con netstat -ano en Windows, y detenlo con kill o taskkill. O arranca tu app en otro puerto, por ejemplo next dev -p 3001.
¿Cómo cambio el puerto en Next.js?
Pasa -p, como en next dev -p 4000, o define la variable de entorno PORT al ejecutar el comando. La documentación de Next.js indica que PORT no se puede definir dentro de un archivo .env, porque el servidor arranca antes de leer ese archivo.
¿Puede otra persona abrir mi localhost:3000?
No a través de esa dirección, porque localhost en su máquina significa su propio ordenador. Para compartirlo en tu red, el servidor debe escuchar en todas las interfaces y los demás usan la IP local de tu máquina y el puerto.
Los puertos en un párrafo
Un ordenador puede ejecutar muchos servidores a la vez, así que cada uno escucha en un puerto numerado. Solo un programa puede escuchar en un puerto y una dirección concretos a la vez, y por eso arrancar un segundo servidor en el 3000 falla con EADDRINUSE.
El puerto 3000 no tiene ningún significado oficial. Se convirtió en costumbre porque herramientas populares lo eligieron por defecto, así que también es el puerto con más probabilidades de estar ocupado por un servidor del que te olvidaste.
Conexión rechazada, paso a paso
Primero confirma que hay un servidor en marcha: su terminal debería mostrar un mensaje de listo y una URL. Si terminó con un error, corrige antes ese error, porque el navegador no puede conectarse a un servidor que no existe.
Después compara los puertos. Si el terminal dice 5173 o 4321 y tú escribiste 3000, el navegador está llamando a una puerta vacía. Por último, prueba 127.0.0.1:3000 en lugar de localhost:3000, lo que descarta que el nombre se resuelva a la dirección IPv6 cuando el servidor solo escucha en IPv4.
Puertos por defecto de los servidores de desarrollo
Valores por defecto según la documentación de cada herramienta, octubre de 2026
Herramienta
Comando
URL por defecto
next dev / next start
Ejemplo hello world de Express
Ruby on Rails
bin/rails server
Vite
Vite preview
vite preview
Astro
astro dev
Gestiona un puerto ocupado en tu propio servidor
Leer el puerto de PORT e informar de EADDRINUSE con claridad
Un pequeño servidor Express que usa el 3000 si no hay otro y muestra un mensaje legible cuando el puerto está ocupado.
macOS y Linux
Lista el proceso que escucha en el puerto y detenlo por su PID (la segunda columna).
Windows (Símbolo del sistema)
Muestra las conexiones con sus ID de proceso, filtra por el puerto y finaliza ese PID.
O usa otro puerto
Deja el otro proceso tranquilo y arranca tu app en un puerto libre.
Liberar un puerto
Puerto
Los puertos van del 1 al 65535. Se muestran los comandos para el 3000.