Ollama con Docker: instalación y primer modelo
Para ejecutar Ollama en Docker, inicia la imagen oficial ollama/ollama con un volumen para los modelos y el puerto 11434: docker run -d -v ollama:/root/.ollama -p 11434:11434 --name ollama ollama/ollama. Con una tarjeta NVIDIA, añade --gpus=all después de instalar el NVIDIA Container Toolkit. En macOS, Docker Desktop no ofrece acceso a la GPU. Publica el puerto en 127.0.0.1 si la API no debe estar accesible desde la red.
Ollama en un contenedor es un servicio aislado que se inicia, se actualiza y se elimina con un comando, sin tocar el sistema. Esta guía parte del comando oficial, añade la GPU NVIDIA, un primer modelo y un archivo Compose, y después aborda lo que los tutoriales omiten: quién puede acceder realmente al puerto 11434, qué versión fijar y por qué una GPU puede desaparecer durante el funcionamiento.
#Ollama en Docker: qué cambia realmente
La imagen oficial se llama ollama/ollama y se encuentra en Docker Hub, donde supera los 100 millones de descargas. Se basa en Ubuntu 24.04 y arranca directamente el servidor Ollama: la variable OLLAMA_HOST vale 0.0.0.0:11434, por lo que la API escucha en el puerto 11434 dentro del contenedor. Quedan cuatro decisiones por tomar: publicar este puerto en el host, montar un volumen en /root/.ollama para conservar los modelos, dar acceso a la GPU con --gpus=all si tienes una tarjeta NVIDIA y elegir la versión de la imagen. El contenedor arranca sin ningún modelo: los descargas después con el comando ollama, ejecutado dentro del contenedor. Estas cuatro decisiones se trasladan sin cambios a un archivo Compose.
Obtienes una instalación aislada, sin servicio del sistema, descrita en un solo archivo y fácil de hacer convivir con otros contenedores (interfaz web, base de datos vectorial, n8n). A cambio, tienes que configurar el acceso a la GPU, no dispones de acceso a la GPU en macOS y debes controlar la exposición de un puerto de red, un aspecto que la mayoría de los tutoriales omiten.
#Qué comando usar según tu hardware
Tu ChatGPT privado y gratuito en tu máquina en 1 hora — LM Studio, Ollama, Open WebUI, tus documentos, sin nube.
- Espacio en línea de por vida
- PDF + archivos
- Reembolsado 30 j
Una sola imagen cubre todos los casos; solo cambian las opciones de arranque según la GPU. La tabla recoge la documentación de Ollama e incluye la restricción que suele causar más problemas.
| Máquina | Imagen y opciones | Qué preparar en el host | Límite que debes conocer |
|---|---|---|---|
| Sin GPU | ollama/ollama, ninguna opción | Docker solo | Reserva esta vía para modelos pequeños |
| NVIDIA, Linux | ollama/ollama con --gpus=all | Controlador 550 o superior, NVIDIA Container Toolkit | Tarjetas con capacidad de cómputo de 5.0 a 6.2: controlador 570 como mínimo |
| NVIDIA, Windows | Misma orden, Docker Desktop | Backend WSL2, controlador compatible con WSL2, kernel WSL2 actualizado | Sin WSL2, no hay acceso al GPU |
| AMD Radeon, Linux | ollama/ollama:rocm con --device /dev/kfd --device /dev/dri | Controlador AMD ROCm v7 | Tarjeta no incluida en la lista: HSA_OVERRIDE_GFX_VERSION, en pruebas |
| Otras GPU (Vulkan) | ollama/ollama con --device /dev/kfd --device /dev/dri | Nada: Vulkan está incluido en la imagen | Desactivable con OLLAMA_VULKAN=0 |
| NVIDIA Jetson | --gpus=all y JETSON_JETPACK=5 o 6 | JetPack 5 o 6 | Ollama no adivina la versión |
| Mac (Docker Desktop) | ollama/ollama, solo procesador | Nada | Sin passthrough de GPU: prefiere la instalación nativa |
#Prerrequisitos
- Docker
- Docker Engine en Linux, Docker Desktop en Windows o macOS, con el comando docker compose para la sección 5.
- Memoria
- El peso del modelo, más el contexto, más un margen para el sistema. qwen3.5:9b pesa 6,6 GB: apunta a 16 GB de RAM para ejecutarlo en la CPU, no a 8.
- Disco
- 20 GB libres para la imagen y uno o dos modelos.
- GPU NVIDIA, opcional
- El controlador se instala en el host, nunca dentro del contenedor; NVIDIA Container Toolkit sirve de puente.
#Procedimiento en cinco pasos
- 01Instalar DockerDocker Engine en Linux, Docker Desktop en Windows o macOS. El comando docker version debe responder tanto desde el cliente como desde el motor.
- 02Preparar el GPU NVIDIA (opcional)Instalar el NVIDIA Container Toolkit, ejecutar nvidia-ctk runtime configure --runtime=docker, reiniciar Docker, luego probar con docker run --rm --gpus all ubuntu nvidia-smi.
- 03Iniciar el contenedordocker run avec -d, --name ollama, -v ollama:/root/.ollama, -p 127.0.0.1:11434:11434 et, avec NVIDIA, --gpus=all.
- 04Descargar un modelodocker exec -it ollama ollama pull, suivi de qwen3.5:4b pour une carte de 8 Go, ou de qwen3.5:9b avec plus de marge.
- 05Verificardocker exec ollama ollama ps doit afficher 100% GPU dans la colonne PROCESSOR.
#1. El comando docker run
La documentación de Ollama da este comando para usar solo la CPU: docker run -d -v ollama:/root/.ollama -p 11434:11434 --name ollama ollama/ollama. La versión que aparece a continuación limita la publicación del puerto a la máquina local, por los motivos que se explican en la sección siguiente, y añade el reinicio automático.
- -p 127.0.0.1:11434:11434
- Publica el puerto 11434 del contenedor en el de la máquina, solo para la propia máquina.
- -v ollama:/root/.ollama
- Volumen con nombre montado donde Ollama almacena sus modelos. Se conserva incluso tras eliminar el contenedor.
- --restart unless-stopped
- Reinicia el contenedor después de un reinicio de Docker o de la máquina, a menos que se detenga manualmente.
La respuesta es un objeto JSON con el número de versión, por ejemplo {"version":"0.34.4"}, la versión estable del 29 de septiembre de 2026.
#Puerto 11434: quién puede realmente acceder a él
Instalado nativamente, Ollama escucha por defecto en 127.0.0.1: solo la máquina puede hablar con él. En el contenedor, la imagen fija en cambio OLLAMA_HOST a 0.0.0.0:11434, de lo contrario el puerto sería inaccesible desde fuera. La protección depende por tanto de la forma en que publiques el puerto.
Según la documentación de Docker, publicar el puerto de un contenedor es poco seguro por defecto: queda accesible desde el exterior, no solo desde el host. El comando -p 11434:11434 lo vincula a todas las direcciones de la máquina. Además, la API local de Ollama no requiere autenticación: cualquiera que acceda al puerto puede listar tus modelos, descargar modelos u ocupar tu GPU.
- -p 11434:11434
- Todas las interfaces del equipo anfitrión: accesible desde la red local e incluso desde Internet.
- -p 127.0.0.1:11434:11434
- Solo en la máquina local. Esta es la opción predeterminada de esta guía.
- -p 192.168.1.10:11434:11434
- Una sola dirección de host; reemplázala por la tuya.
Para permitir deliberadamente el acceso a Ollama desde una red, coloca un proxy inverso con autenticación delante de Ollama, como explica la guía de seguridad citada al final de la página.
#Cambiar el puerto en el host
El puerto 11434 está ocupado si ya hay otra instancia en ejecución, a menudo la aplicación nativa. No toques el lado del contenedor: cambia solo el número de la izquierda. Con -p 127.0.0.1:11435:11434, tu máquina habla con Ollama en el puerto 11435; dentro del contenedor, nada cambia.
#Conectarse a Ollama desde otro contenedor
Dos servicios de un mismo archivo Compose comparten una red en la que se puede acceder a cada uno por el nombre de su servicio. Open WebUI utiliza así http://ollama:11434, sin publicar el puerto hacia el exterior. Si Ollama se ejecuta en el host, la documentación de Open WebUI señala el problema: escucha en 127.0.0.1 y no es accesible desde el contenedor. Hay que acceder a él mediante host.docker.internal y hacer que escuche en otra dirección.
#2. Activar el GPU NVIDIA
Docker no ve tu GPU por defecto. En el equipo anfitrión necesitas un controlador NVIDIA actualizado, el NVIDIA Container Toolkit y, después, la opción --gpus. Ollama requiere un controlador 550 o más reciente, y 570 para las tarjetas antiguas con capacidad de cómputo de 5.0 a 6.2. Los contenedores usan el controlador del equipo anfitrión; no incluyen uno propio.
El comando nvidia-ctk modifica el archivo /etc/docker/daemon.json para que Docker reconozca el runtime de NVIDIA, de ahí el reinicio. Para Fedora o RHEL, la documentación de Ollama proporciona la variante con yum o dnf. Antes de tocar Ollama, aísla el problema con un contenedor desechable: si falla, Ollama tampoco detectará tu GPU.
Reinicia luego Ollama con acceso a GPU. El volumen se mantiene: los modelos ya descargados permanecen allí.
Para una Radeon en Linux, la etiqueta rocm y los dispositivos /dev/kfd y /dev/dri sustituyen a --gpus; el controlador ROCm v7 debe instalarse en el host.
#3. Primer modelo
El contenedor está funcionando, pero está vacío. El comando ollama está dentro del contenedor: se invoca con docker exec. Esta guía utiliza qwen3.5:9b, que la biblioteca Ollama describe con 6,6 GB, una ventana de 256K y soporte de texto e imagen.
Estos 6,6 GB deben caber en memoria antes incluso de que el contexto entre en juego. En una tarjeta de 8 GB, el margen es estrecho: la variante 4B es la opción prudente.
| Tag | Peso en disco | Punto de referencia para elegir |
|---|---|---|
| qwen3.5:4b | 3,4 GB | Tarjeta de 8 GB, con margen para el contexto |
| qwen3.5:9b | 6,6 GB | Tarjeta de 12 GB o más, o 16 GB de RAM para ejecutar el modelo en CPU |
| qwen3.5:27b | 17 GB | Tarjeta de 24 GB, contexto moderado |
| qwen3.5:35b | 24 GB | No cabe en una tarjeta de 24 GB al incluir el contexto: parte del modelo se carga en la RAM del sistema. |
Los marcadores de la última columna son órdenes de magnitud, no medidas: la posición real depende del contexto y de la cuantificación. Para hablar con el modelo, inicia ollama run dans el contenedor.
El uso habitual se realiza a través de la API HTTP: cualquier cliente se comunica con el contenedor como con una instalación nativa de Ollama, y la documentación especifica que la API acepta un subconjunto del formato OpenAI.
En la columna PROCESSOR, 100% GPU significa que el modelo está íntegramente en la tarjeta, 100% CPU que está en la memoria del sistema y 48%/52% CPU/GPU que está repartido entre ambas. Este reparto ralentiza notablemente la generación: es mejor un modelo más pequeño que uno que no quepa íntegramente en la tarjeta.
#El contexto se configura en el contenedor
La ventana de contexto por defecto depende de la memoria: 4k con menos de 24 GiB de VRAM, 32k entre 24 y 48 GiB, 256k por encima. La documentación recomienda al menos 64.000 tokens para agentes y herramientas de código. Un contexto más grande consume más memoria: usa -e OLLAMA_CONTEXT_LENGTH=8192 en docker run, luego controla la columna CONTEXT de ollama ps.
#4. Volumen persistente: dónde viven tus modelos
El -v ollama:/root/.ollama crea un volumen Docker llamado ollama, distinto al contenedor. La documentación de Docker lo confirma: un volumen persiste tras eliminar el contenedor, lo que permite reemplazar la imagen sin tener que volver a descargar los modelos. El comando docker volume inspect ollama indica su Mountpoint, la ubicación de los archivos en el anfitrión.
En Linux, la instalación nativa guarda sus modelos en /usr/share/ollama/.ollama/models. Este directorio no tiene ningún vínculo con el volumen Docker: un modelo descargado por un lado no aparece por el otro.
#5. Docker Compose: lo mismo, en un archivo
El archivo que aparece a continuación hace lo mismo que los comandos anteriores, se revisa de un vistazo y se puede versionar en git. Fija la versión de la imagen: reemplaza 0.34.4 por la última versión estable en el momento de leer esto.
El bloque deploy reserva la GPU; según la documentación de Compose, el campo capabilities es obligatorio y, si falta, el despliegue falla. Si no tienes una GPU NVIDIA, elimina el bloque entero: el resto funciona con el procesador.
#Actualizar Ollama sin perder tus modelos
A fecha de 29 de septiembre de 2026, la página de versiones de Ollama en GitHub marca la 0.34.4 como última versión estable, mientras que la 0.35.0 aparece como versión preliminar. Sin embargo, la etiqueta 0.35.0 ya existe en Docker Hub, entre etiquetas rc, de release candidate. Por tanto, fija un número de versión estable en lugar de seguir la última etiqueta publicada: la actualización llega cuando tú lo decides.
Con Compose, cambia el número en el archivo y luego ejecuta docker compose pull y docker compose up -d. Con docker run, descarga la nueva imagen, elimina el contenedor anterior y vuelve a ejecutar el mismo comando: mientras el volumen sea el mismo, los modelos se conservarán. Por último, comprueba la versión con curl http://localhost:11434/api/version.
#Docker o instalación nativa: la elección
Ambos métodos proporcionan el mismo servidor en el mismo puerto. La tabla se basa en la documentación de Ollama; no compara las velocidades porque no hay ninguna medición publicada que se pueda citar.
| Criterio | Ollama dentro de Docker | Ollama instalado nativamente |
|---|---|---|
| Actualización | Cambiar la etiqueta y después ejecutar docker compose pull | Automático en macOS y Windows; en Linux, ejecutar nuevamente el script de instalación |
| Modelos | Volumen de Docker o carpeta montada | /usr/share/ollama/.ollama/models sous Linux |
| Registros | docker logs ollama | journalctl -u ollama en Linux con systemd |
| Exposición a la red | Elección del -p (127.0.0.1 o todas las direcciones) | 127.0.0.1 por defecto, modificable con OLLAMA_HOST |
| GPU en Mac | Sin acceso | Instalación directa en la máquina |
Elige Docker para agrupar varios servicios, fijar una versión o compartir un equipo. Elige la instalación nativa en un Mac o cuando Docker no aporte nada a un uso individual.
#Solución de problemas
- could not select device driver "nvidia"
- Falta el NVIDIA Container Toolkit, o Docker no se ha reiniciado después de ejecutar nvidia-ctk runtime configure. Vuelve a realizar la configuración, reinicia Docker y prueba de nuevo con docker run --rm --gpus all ubuntu nvidia-smi.
- La GPU funciona, luego Ollama vuelve al procesador
- Síntoma documentado: el registro indica fallos en la detección de la GPU tras un tiempo. Ollama recomienda desactivar la gestión de cgroup de systemd en Docker: añade "exec-opts": ["native.cgroupdriver=cgroupfs"] a /etc/docker/daemon.json y luego reinicia Docker.
- Errores GPU 3, 46, 100 o 999
- Recarga el controlador UVM con sudo rmmod nvidia_uvm y después sudo modprobe nvidia_uvm, o reinicia la máquina.
- El puerto 11434 ya está en uso
- Otra instancia está escuchando, a menudo la aplicación nativa. Deténla o publica en otro puerto con -p 127.0.0.1:11435:11434.
- Respuestas truncadas
- El contexto predeterminado depende de la VRAM. Añade -e OLLAMA_CONTEXT_LENGTH=8192 al iniciar el servicio y vigila el uso de memoria.
- Descarga bloqueada tras un proxy
- Pasa -e HTTPS_PROXY=https://proxy.example.com al contenedor. La documentación recomienda evitar HTTP_PROXY, ya que puede perturbar a los clientes.
- Inaccesible desde la red local
- Normal con -p 127.0.0.1:11434:11434. Abre el puerto solo si está protegido mediante autenticación.
#Preguntas frecuentes
¿Cuál es la imagen oficial de Docker de Ollama?+
¿Puede Ollama usar la GPU dentro de Docker en Windows o en Mac?+
¿Cómo actualizar Ollama en Docker sin perder los modelos?+
¿Cómo conectar Open WebUI a Ollama con Docker Compose?+
¿La API de Ollama dentro de un contenedor está protegida por contraseña?+
#Para ir más allá
Tienes un Ollama funcional, aislado, con un modelo en la GPU. Los siguientes pasos lógicos: una interfaz de conversación, medidas de seguridad antes de compartir el acceso por red y, después, una pila de producción.
- Instalar Ollama en todos los sistemas: la guía general
- Solucionar problemas de Ollama: GPU no detectada, lentitud, errores de memoria
- Docker Model Runner: ejecutar LLM con Docker, sin Ollama
- Fuente: documentación de Ollama, página de Docker
- Fuente: imagen ollama/ollama en Docker Hub
- Fuente: Docker, publicación de puertos
- Fuente: NVIDIA Container Toolkit, guía de instalación
- Fuente: documentación de Ollama, GPU soportados
¿Un comentario, un error, una precisión? Avísanos, eso mejora la guía para todos.