Ollama connection refused: el triaje en 60 segundos

Connection refused significa que nada escucha en el puerto 11434. Las seis causas reales, ordenadas, más el comando curl que te dice cuál te tocó.

HUMANpor @mrsaynothing26d5 min de lectura

El error nunca miente sobre lo que significa: curl: (7) Failed to connect to localhost port 11434: Connection refused es tu sistema operativo reportando que nada escucha en el puerto 11434. Ollama no está "roto", el modelo no está corrompido, y la respuesta refleja de internet — reinstalar — pasa de largo ante seis causas aburridas que se descartan de a un minuto cada una.

Corre primero el comando de triaje. Parte el problema por la mitad antes de leer otra sección:

curl http://localhost:11434

Ollama is running significa que el servidor está bien y tu cliente llama al lugar equivocado — salta a las preguntas de host. Connection refused significa que el lado del servidor necesita trabajo. Reproduje el rechazo en sí en una máquina de bench desechable sin nada escuchando: el kernel responde bash: connect: Connection refused antes de que una aplicación se entere.

¿Por qué Ollama dice connection refused?

Porque una conexión TCP llegó a una máquina donde ningún socket sostiene el puerto 11434. Ese es todo el mecanismo — una de estas seis cosas es cierta, y están ordenadas por frecuencia, la más probable primero.

¿Ollama está corriendo de verdad?

Las versiones de escritorio (macOS, Windows) corren Ollama como aplicación de bandeja, y es más fácil de cerrar de lo que la gente cree. La instalación en Linux usa un servicio systemd que quizá nunca se habilitó después de un reinicio.

# Linux: ¿el servicio está vivo?
systemctl status ollama

# El chequeo directo que funciona en todos lados:
ollama list

Si ollama list alcanza el servidor, responde con una tabla de modelos. Si también responde error de conexión, arranca el servidor y vuelve permanente el arranque:

sudo systemctl enable --now ollama   # Linux: arrancar + sobrevivir reinicios
journalctl -u ollama -n 50           # si sigue muriendo, lee por qué

Un servicio que arranca y muere enseguida aparece aquí como un crash loop, y journalctl imprime la razón — puerto ya tomado, disco lleno, override de entorno incorrecto.

¿Es el puerto, o la máquina que llamas?

Ollama escucha en 127.0.0.1:11434 salvo indicación contraria. Dos desajustes clásicos:

Un puerto personalizado. Si tú — o un tutorial que seguiste — pusiste alguna vez OLLAMA_HOST=127.0.0.1:11435, el servidor responde en 11435 y cada cliente que sigue llamando al 11434 recibe un rechazo. Confirma qué escucha realmente:

ss -ltn | grep 1143

Deberías ver una línea con 127.0.0.1:11434. Ninguna línea: el servidor está caído (sección anterior). Otro puerto u otra dirección: tus clientes son los que están desactualizados.

localhost contra 127.0.0.1. En algunas máquinas localhost resuelve primero a la dirección IPv6 ::1, y un servidor atado solo a 127.0.0.1 nunca ve esos intentos. El test que discrimina cuesta dos segundos:

curl http://127.0.0.1:11434   # funciona, y curl http://localhost:11434 rechaza

Si la IP cruda funciona y el nombre no, ata el servidor a ambos o apunta tus clientes a 127.0.0.1 directamente.

¿Por qué funciona en el host pero no desde Docker?

Esta es la variante más común en la calle — por eso el autocompletado de este error está lleno de n8n, Open WebUI y extensiones de VS Code. Todo contenedor que llama a http://localhost:11434 se llama a sí mismo: dentro del contenedor, 127.0.0.1 es el loopback del contenedor, donde nada escucha.

Quién llama URL correcta hacia el Ollama del host
Contenedor en Docker Desktop http://host.docker.internal:11434
Contenedor en Linux puro http://host.docker.internal:11434 más --add-host=host.docker.internal:host-gateway
Contenedor en la misma red Docker http://<nombre-del-servicio>:11434
Otra máquina de tu LAN http://<ip-de-máquina>:11434 (siguiente sección)

El flag host-gateway viene de la propia documentación de Docker para exactamente este caso, y es la única línea que arregla la mitad de los reportes de "Ollama connection refused" que llegan desde contenedores.

¿Cómo expongo Ollama a otras máquinas?

Por defecto Ollama se ata solo al loopback — a propósito, porque la API no tiene autenticación. Exponerlo es una variable de entorno; ponla en el override de systemd y no en tu shell para que el servicio la vea de verdad:

sudo systemctl edit ollama
[Service]
Environment="OLLAMA_HOST=0.0.0.0:11434"

Luego sudo systemctl restart ollama y confirma con ss -ltn | grep 11434 — la columna de dirección debe leer 0.0.0.0:11434. Dos continuaciones que la gente salta: un firewall que sigue bloqueando el 11434 produce timeouts en vez de rechazos (otro fallo, mismo puerto), y el JavaScript del navegador que llama a la API desde otro origen necesita OLLAMA_ORIGINS, según la FAQ de Ollama — las llamadas del navegador llegan y las rechaza la capa CORS, lo que se ve idéntico desde afuera.

Un rechazo de conexión es un problema de ubicación, no un programa roto: algo que debería estar escuchando no escucha, o quien llama llama desde un lugar al que el que escucha no llega.

¿Y si sigue volviendo?

Entonces un proceso tiene el puerto y otro pierde la carrera cada vez. ss -ltnp | grep 11434 muestra el proceso que sostiene el socket; una segunda instancia de Ollama arrancada a mano es la ladrona habitual. Mata a la intrusa, deja al servicio como único dueño, y el error desaparece.

Para el resto del clúster: una vez que el servidor responde, la GPU que se niega a usar es la queja más común que sigue, y correr modelos GGUF en local cubre el lado de la carga. Ambos viven en el hub de LLM local.

Ollama cruzó las 181.000 estrellas en GitHub en septiembre de 2026 — más máquinas corriendo implica más de estas seis respuestas buscadas la misma semana en que se tipean. El triaje está a un curl de distancia.