[SOLUCIONADO] Error 'curl: (7) Failed to connect to localhost port'
El error curl: (7) Failed to connect to localhost port 3000: Connection refused ocurre cuando la utilidad de línea de comandos curl intenta enviar una petición a un servicio web en tu máquina local, pero no hay ningún proceso escuchando en ese puerto o el servicio solo está enlazado a IPv6 (::1) en lugar de IPv4 (127.0.0.1).
El Diagnóstico Rápido
0.0.0.0 para recibir tráfico externoEl error curl: (7) Failed to connect to localhost port 3000: Connection refused ocurre cuando la utilidad de línea de comandos curl intenta enviar una petición a un servicio web en tu máquina local, pero no hay ningún proceso escuchando en ese puerto o el servicio solo está enlazado a IPv6 (::1) en lugar de IPv4 (127.0.0.1).
Solución Rápida (1 Minuto):
- Comprueba si tu servidor local está encendido en otra terminal.
- Prueba conectando a la IP explícita
127.0.0.1en lugar del nombrelocalhost:curl http://127.0.0.1:3000
La Solución Paso a Paso
-
1
Paso 1: Verificar la escucha de puertos activos en tu sistema
Comprueba qué proceso está escuchando en el puerto deseado usando
ssonetstat:BASH# Inspeccionar el puerto 3000 (o cambia por tu puerto: 8080, 5000, 80) sudo ss -tulpn | grep :3000Si la comando no devuelve ninguna salida, el servidor Node.js, Python o Go no está en ejecución. Inicializa tu servidor web antes de lanzar la petición cURL.
-
2
Paso 2: Conflicto entre localhost (IPv6 vs IPv4)
En distribuciones de Linux recientes,
localhostresuelve primero a la dirección de bucle invertido de IPv6::1. Si tu servidor web en Node.js (Express) o Python (Flask/FastAPI) está configurado para escuchar únicamente en127.0.0.1(IPv4), cURL fallará al intentar la versión IPv6.Solución 1: Forzar cURL a usar IPv4:
BASHcurl -4 http://localhost:3000Solución 2: Usar la dirección IP loopback explícita:
BASHcurl http://127.0.0.1:3000 -
3
Paso 3: Configurar la dirección de enlace en tu código (Host Binding)
En tu servidor de aplicaciones backend, asegúrate de enlazar el host a
0.0.0.0o127.0.0.1en lugar de omitirlo:- En Express.js (Node.js):
JAVASCRIPT
app.listen(3000, '0.0.0.0', () => { console.log('Servidor activo en el puerto 3000'); }); - En FastAPI / Uvicorn (Python):
BASH
uvicorn main:app --host 0.0.0.0 --port 3000
- En Express.js (Node.js):
Consejo de Prevención
Prácticas de seguridad recomendadas:
- Si estás probando contenedores de Docker, recuerda mapear el puerto del contenedor hacia el host (
docker run -p 3000:3000 ...).