Instalar Ollama en Docker: CPU, GPU, volúmenes y comprobaciones de API
Un recorrido práctico para ejecutar Ollama en Docker sin perder los modelos ni confundir la red del host con la red del contenedor.
En esta guía
- Qué cambia al ejecutar Ollama en Docker
- Elegir CPU, NVIDIA GPU o AMD GPU
- Crear almacenamiento persistente para modelos
- Iniciar el contenedor y verificar la API
- Conectar aplicaciones sin confundir localhost
- Proteger modelos, contexto y exposición
- Resolver fallos de salud, GPU, volumen y API
- Preguntas frecuentes sobre Ollama en Docker
La búsqueda instalar Ollama en Docker suele esconder tres decisiones: dónde se guardan los modelos, cómo llega el contenedor al host o a otro servicio y si se usará CPU o una GPU disponible. Empieza por el camino mínimo. Ejecuta la imagen oficial con un volumen con nombre, verifica la API local y añade opciones de GPU o una segunda aplicación solo cuando el contenedor base esté sano.
Qué cambia al ejecutar Ollama en Docker
Ollama como servicio nativo parece sencillo: un comando inicia el runtime, los modelos viven en el equipo y los clientes usan el puerto 11434. Docker envuelve ese servicio en un contenedor con su propio sistema de archivos, procesos, red y ciclo de vida. Esto facilita repetir el despliegue, pero un modelo guardado solo en la capa escribible del contenedor puede desaparecer cuando se elimina el contenedor.
Por eso un comando docker run que funciona no es toda la configuración. Decide si Docker será el único runtime de Ollama, si accederá una aplicación del host u otro contenedor y si las descargas deben sobrevivir a una actualización. Mantén esos límites claros antes de añadir OpenCode, un host MCP, una interfaz web o un cliente remoto.
El ciclo del contenedor no es el almacenamiento de modelos
Puedes reemplazar el contenedor con seguridad cuando /root/.ollama está fuera de la capa escribible. Para ello necesitas un volumen con nombre o un bind mount elegido de forma consciente.
Elegir CPU, NVIDIA GPU o AMD GPU
Usa CPU primero cuando estés comprobando la red, los volúmenes o un host nuevo. Tiene menos piezas y ofrece una línea base limpia para comparar el tiempo de carga y la velocidad de respuesta. Cuando la API funcione, cambia al comando del acelerador documentado para tu host en lugar de copiar flags de Docker de otra combinación.
Los contenedores NVIDIA suelen depender de un controlador funcional y de NVIDIA Container Toolkit. En AMD pueden cambiar la etiqueta de la imagen y el mapeo de dispositivos; la compatibilidad depende del sistema operativo, el runtime y la documentación actual de Ollama. Trata la GPU como una capa de optimización: el endpoint, el volumen y las comprobaciones básicas deben seguir iguales.
docker version
docker run --rm --gpus=all nvidia/cuda:12.0.0-base-ubuntu22.04 nvidia-smi
| Ruta | Cuándo usarla | Comprobación clave |
|---|---|---|
| CPU | Quieres la base más simple o no tienes un acelerador compatible | Comprobar la API y una respuesta pequeña antes de ajustar rendimiento |
| NVIDIA GPU | El controlador del host y NVIDIA Container Toolkit ya funcionan | Verificar que Docker ve la GPU antes de descargar un modelo grande |
| AMD GPU | El host y la imagen de Ollama soportan la ruta ROCm necesaria | Seguir los requisitos actuales de imagen y dispositivos |
| Host y contenedor | Otro servicio necesita llamar a Ollama por una red Docker | Usar el nombre del servicio dentro de la red, no localhost del host |
Crear almacenamiento persistente para modelos
Un volumen con nombre es el valor por defecto más fácil para Ollama en Docker: Docker administra el lugar y el contenedor puede reemplazarse sin copiar los modelos a mano. La imagen oficial guarda los datos de Ollama en /root/.ollama, así que monta siempre el volumen allí. No crees otro volumen durante una actualización si quieres conservar la misma biblioteca.
Un bind mount puede ser útil para controlar el uso de disco, guardar los datos en una unidad concreta o hacer copias de seguridad de una carpeta conocida. También añade decisiones de permisos y rutas. Para el primer despliegue, un volumen con nombre suele ser más fácil de explicar y más difícil de romper.
Un volumen no es una copia de seguridad
Un volumen protege los modelos frente al reemplazo del contenedor, pero no crea automáticamente una segunda copia. Haz una copia o define una reconstrucción de forma deliberada si la biblioteca es importante.
docker volume create ollama-data
docker run -d --name ollama -p 11434:11434 -v ollama-data:/root/.ollama ollama/ollama
docker exec -it ollama ollama pull <model-name>
Iniciar el contenedor y verificar la API
Cuando docker run devuelva el ID del contenedor, comprueba el estado antes de descargar un modelo grande. docker ps indica si el proceso sigue activo y docker logs puede mostrar errores de puerto, permisos o runtime. Después consulta /api/tags desde el host. Una respuesta correcta demuestra que el endpoint HTTP es accesible, no que todos los modelos estén cargados ni que cualquier cliente tenga permiso.
Haz una petición con un modelo pequeño como segunda prueba. Así separas un listener HTTP sano de una ruta de modelo funcional. Si la API responde pero la petición del modelo falla, revisa el nombre del modelo, el espacio libre, la memoria y los logs antes de cambiar la red.
-
Comprobar el proceso
Confirma que el contenedor está Up y que el puerto publicado es el que querías exponer.
-
Comprobar el endpoint
Solicita /api/tags desde la máquina que publica el puerto 11434 y registra el código de estado.
-
Comprobar un modelo
Descarga un modelo pequeño y ejecuta una petición inocua antes de conectar un editor o agente.
docker ps --filter name=ollama
docker logs ollama --tail 100
curl http://127.0.0.1:11434/api/tags
docker exec -it ollama ollama list
Conectar aplicaciones sin confundir localhost
La URL correcta depende del lugar donde se ejecuta el cliente. Una aplicación de escritorio en el mismo host puede llamar normalmente a http://127.0.0.1:11434 si Docker publica el puerto. Otro contenedor de la misma red Docker debe usar el nombre del servicio y el puerto, por ejemplo http://ollama:11434. Dentro de un contenedor, 127.0.0.1 apunta a ese contenedor; no significa automáticamente el host Windows, macOS o Linux.
Para un cliente remoto necesitas una dirección protegida y una regla de firewall explícita. No publiques el puerto 11434 en Internet solo para que una aplicación de prueba conecte. Documenta la ruta, la autenticación o red privada y el servicio de modelos exacto que el cliente puede alcanzar.
| Lugar del cliente | Endpoint habitual | Problema frecuente |
|---|---|---|
| Escritorio del host | http://127.0.0.1:11434 | Usar un nombre de servicio Docker desde una aplicación del host |
| Otro servicio Compose | http://ollama:11434 | Usar localhost, que apunta al contenedor que llama |
| Otra máquina | Dirección privada y filtrada del host | Publicar una API sin autenticación en una interfaz pública |
| Odysseus o un editor | El endpoint de los ajustes del proveedor de esa aplicación | Cambiar el endpoint antes de superar la prueba de API |
Proteger modelos, contexto y exposición
Docker no hace privado un servicio de Ollama por sí solo. Un puerto publicado puede enlazarse a todas las interfaces según el comando y los valores del host. Para una prueba solo local, prefiere una asociación de loopback como -p 127.0.0.1:11434:11434. Si un servicio Compose necesita la API internamente, usa una red privada y no publiques un puerto del host sin motivo.
La longitud de contexto, la concurrencia y la memoria de GPU cambian el uso de RAM o VRAM. Aumenta una variable cada vez y observa docker stats, la memoria del host y el comportamiento de las respuestas. No guardes secretos en imágenes, historial de comandos, capturas ni archivos Compose versionados; un endpoint local y una herramienta de búsqueda externa tienen límites de privacidad diferentes.
| Comprobación | Por qué importa | Valor más seguro |
|---|---|---|
| Asociación del puerto | Controla qué interfaces pueden llegar a la API | Usar loopback para pruebas del host |
| Ruta del volumen | Determina si los modelos sobreviven al reemplazo | Usar un volumen con nombre documentado |
| Contexto y concurrencia | Pueden multiplicar el uso de memoria por petición | Empezar bajo y medir antes de aumentar |
| Herramientas externas | Pueden enviar prompts o contenido fuera del host | Revisar el proveedor y limitar permisos |
Resolver fallos de salud, GPU, volumen y API
Cuando falla un despliegue de Ollama en Docker, cambia una capa cada vez. Comprueba primero Docker, después que el contenedor de Ollama siga activo, luego el volumen, la API, el modelo y por último la aplicación cliente. Sustituir todo el comando después de cada error oculta el límite que realmente falló.
Los fallos de GPU suelen estar en el runtime del host y no en la API de Ollama. Un contenedor puede responder a /api/tags y seguir usando CPU porque no se pasó la GPU, el controlador no es compatible o la imagen no corresponde al host. Si falta un modelo después de recrear el contenedor, compara docker inspect y el destino /root/.ollama antes de volver a descargarlo.
Eliminar el contenedor no elimina el volumen
El último comando solo quita el contenedor. No ejecutes docker volume rm ollama-data hasta confirmar que los modelos ya no son necesarios o que tienen una copia.
docker inspect ollama
docker stats ollama
docker stop ollama && docker rm ollama
| Síntoma | Límite probable | Siguiente comprobación |
|---|---|---|
| El contenedor termina al instante | Imagen, comando, permisos o runtime | Leer docker logs ollama y el código de salida |
| Conexión a la API rechazada | Asociación del puerto o salud del proceso | Comprobar docker ps, puertos y /api/tags |
| Desapareció el modelo | Volumen incorrecto o ausente | Comparar los mounts de docker inspect y /root/.ollama |
| Falla el flag de GPU | Controlador del host o runtime del contenedor | Ejecutar la prueba GPU más pequeña del proveedor |
| Funciona desde el host pero no desde el contenedor | Namespace de red | Cambiar localhost por el nombre del servicio Compose |
| Las peticiones usan demasiada memoria | Contexto, concurrencia o tamaño del modelo | Bajar una opción y observar las métricas |
Preguntas frecuentes sobre Ollama en Docker
Referencias oficiales
- Documentación de Ollama Docker - Imágenes de contenedor y guía oficial de Docker
- Documentación de la API de Ollama - Referencia oficial de endpoints y peticiones
- GPU con Docker Compose - Reserva de GPU y configuración oficial de Compose
Guías relacionadas de IA local
- Configuración Docker de Odysseus AI - Despliegue Docker del espacio de trabajo completo de Odysseus AI.
- Configuración de Ollama para Odysseus AI - Conecta un runtime Ollama existente sin mezclar los endpoints del host y del contenedor.
- Servidor MCP de Ollama - Separa la inferencia local de herramientas MCP y llamadas de red externas.
- Ollama Web Search - Compara la API alojada de Web Search con rutas locales y autoalojadas.
- Configuración de OpenCode con Ollama - Usa un endpoint Ollama en contenedor dentro de un flujo de coding agent local.
Última actualización: 22 de agosto de 2026
Volver a la página de inicio