Última actualización:

Ollama en Docker: imagen oficial, GPU passthrough y docker-compose (2026)

Ejecutar Ollama en Docker permite desplegar modelos de lenguaje locales en cualquier entorno de forma reproducible y aislada. Esta guía cubre la imagen oficial de Ollama en Docker Hub, como habilitar el acceso a la GPU (NVIDIA y AMD), volúmenes para persistir modelos entre reinicios, configuración de redes y variables de entorno, y un docker-compose completo que incluye Ollama y Open WebUI listos para producción.

Lo más importante de Ollama en Docker
  • La imagen oficial es ollama/ollama en Docker Hub. Para AMD usa ollama/ollama:rocm. No hay imagen para Windows containers.
  • Los modelos se guardan en /root/.ollama/models dentro del contenedor. Monta siempre un volumen en esa ruta para que persistan entre reinicios.
  • Para GPU NVIDIA: instala el NVIDIA Container Toolkit en el host y añade --gpus=all al comando docker run.
  • Para que otros contenedores accedan a la API, configura OLLAMA_HOST=0.0.0.0 y usa el nombre del servicio como hostname en docker-compose.
  • Nunca expongas el puerto 11434 en internet sin autenticación. Ollama no tiene control de acceso nativo; usa un proxy inverso.
Arquitectura de despliegue de Ollama en Docker con GPU passthrough
Arquitectura completa de Ollama en Docker: contenedor, volumen persistente, Open WebUI y GPU passthrough NVIDIA/AMD.

La imagen oficial de Ollama en Docker Hub

Ollama publica imágenes Docker oficiales en hub.docker.com/r/ollama/ollama . La imagen base incluye la última versión estable de Ollama con soporte para CPU y GPU NVIDIA (CUDA). Para GPU AMD se usa la variante :rocm.

Ollama en Docker Hub
Captura de pantalla de la página de Ollama en Docker Hub
La imagen ollama/ollama se actualiza con cada nueva versión. Consulta los tags disponibles en Docker Hub o en la documentación oficial de Docker .
Variantes de la imagen Docker de Ollama — mayo 2026
Imagen GPU soportada Cuando usarla
ollama/ollama:latest NVIDIA CUDA + CPU Uso general con NVIDIA o solo CPU
ollama/ollama:rocm AMD ROCm + CPU GPUs AMD (RX 6000+, Instinct)
ollama/ollama:0.x.y NVIDIA CUDA + CPU Versión específica para entornos fijos
Primeros pasos

Inicio rápido: Ollama en Docker en tres comandos

El flujo mínimo para tener Ollama funcionando en Docker: arrancar el contenedor, descargar un modelo y hacer la primera llamada a la API.

Paso 1: arrancar el contenedor

docker run -d \
  --name ollama \
  -v ollama:/root/.ollama \
  -p 11434:11434 \
  ollama/ollama

Paso 2: descargar un modelo

docker exec -it ollama ollama pull llama3.2:3b

Paso 3: verificar que la API responde

curl http://localhost:11434/api/generate \
  -H "Content-Type: application/json" \
  -d '{"model":"llama3.2:3b","prompt":"Hola","stream":false}'

El flag -v ollama:/root/.ollama crea un volumen Docker con nombre ollama que persiste los modelos descargados. Sin este flag, los modelos se perderán cada vez que elimines el contenedor. El flag -p 11434:11434 expone la API REST en el puerto 11434 del host.

Aceleración NVIDIA

GPU passthrough NVIDIA: NVIDIA Container Toolkit

Para usar la GPU NVIDIA con Ollama en Docker necesitas instalar el NVIDIA Container Toolkit en el host. Este toolkit actua como puente entre Docker y los drivers de NVIDIA, sin modificar la imagen base de Ollama.

Requisitos previos

  • Linux (Ubuntu 20.04+, Debian 11+, RHEL 8+). En Windows usar WSL2.
  • Driver NVIDIA instalado en el host (versión 525+ para CUDA 12.x).
  • Docker Engine 20.10+ o Docker Desktop 4.x.

Instalación del NVIDIA Container Toolkit

# Añadir el repositorio de NVIDIA
curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | \
  sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg

curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \
  sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
  sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list

# Instalar
sudo apt-get update
sudo apt-get install -y nvidia-container-toolkit

# Configurar Docker para usar el runtime de NVIDIA
sudo nvidia-ctk runtime configure --runtime=docker
sudo systemctl restart docker

# Verificar que Docker puede ver la GPU
docker run --rm --gpus all nvidia/cuda:12.3-base nvidia-smi

Arrancar Ollama con GPU NVIDIA

# Con acceso a todas las GPUs del sistema
docker run -d \
  --name ollama \
  --gpus all \
  -v ollama:/root/.ollama \
  -p 11434:11434 \
  ollama/ollama

# Solo con la GPU 0 (en sistemas con varias GPUs)
docker run -d \
  --name ollama \
  --gpus '"device=0"' \
  -v ollama:/root/.ollama \
  -p 11434:11434 \
  ollama/ollama

# Verificar que Ollama detecta la GPU
docker exec -it ollama ollama run llama3.2:3b "Di hola" 2>&1 | head -20

Para confirmar que Ollama está usando la GPU, observa la salida al cargar un modelo: deberá indicar el nombre de la GPU y la VRAM disponible. Si ves no GPU detected, revisa que el NVIDIA Container Toolkit esté instalado correctamente y que los drivers del host estén actualizados.

Aceleración AMD

GPU AMD con ROCm

Ollama soporta GPUs AMD usando la plataforma ROCm. La imagen ollama/ollama:rocm incluye los binarios ROCm necesarios y requiere pasar los dispositivos de la GPU al contenedor manualmente.

Requisitos

  • GPU AMD compatible con ROCm: RX 6000 (RDNA 2), RX 7000 (RDNA 3), RX 9000 (RDNA 4) o Instinct.
  • Driver AMDGPU instalado en el host.
  • El usuario que ejecuta Docker debe pertenecer al grupo video y render.

Arrancar Ollama con GPU AMD

# Imagen ROCm con acceso a los dispositivos necesarios
docker run -d \
  --name ollama-amd \
  --device /dev/kfd \
  --device /dev/dri \
  -v ollama:/root/.ollama \
  -p 11434:11434 \
  ollama/ollama:rocm

# Si tienes varias GPUs y quieres usar solo una especifica
docker run -d \
  --name ollama-amd \
  --device /dev/kfd \
  --device /dev/dri/renderD128 \
  -v ollama:/root/.ollama \
  -p 11434:11434 \
  -e HSA_OVERRIDE_GFX_VERSION=10.3.0 \
  ollama/ollama:rocm

La variable HSA_OVERRIDE_GFX_VERSION puede ser necesaria para GPUs cuya arquitectura no está completamente soportada por ROCm. Por ejemplo, la RX 6700 XT usa 10.3.0, la RX 7900 XTX usa 11.0.0. Consulta la documentación oficial de Ollama para la tabla de compatibilidad actualizada.

Persistencia de datos

Volúmenes: persistir modelos entre reinicios

Sin un volumen configurado, los modelos descargados se pierden cuando el contenedor se elimina. Un volumen Docker con nombre o un bind mount son las dos opciones para mantener los datos persistentes.

Volumen con nombre (recomendado)

La forma más sencilla y portable. Docker gestiona el volumen automáticamente.

# Crear el volumen (opcional, se crea automáticamente si no existe)
docker volume create ollama-models

# Arrancar el contenedor con el volumen
docker run -d \
  --name ollama \
  -v ollama-models:/root/.ollama \
  -p 11434:11434 \
  ollama/ollama

# Ver donde esta el volumen en el host
docker volume inspect ollama-models

Bind mount (ruta del host)

Útil cuando quieres tener los modelos en una ruta específica del host (por ejemplo, en un disco con más espacio o un NAS montado).

# Preparar la carpeta en el host
mkdir -p /data/ollama-models

# Arrancar con bind mount
docker run -d \
  --name ollama \
  -v /data/ollama-models:/root/.ollama \
  -p 11434:11434 \
  ollama/ollama

# En Linux el propietario debe ser uid 0 (root dentro del contenedor)
# La imagen de Ollama corre como root por defecto, asi que no hay problema.

Ubicación de los modelos dentro del contenedor

/root/.ollama/models/
Aquí se guardan los pesos de los modelos descargados. Cada modelo ocupa entre 1 GB (modelos 1B cuantizados) y 40+ GB (modelos 70B sin cuantizar). Este directorio es el más crítico para persistir.
/root/.ollama/id_ed25519
Clave de identidad de la instalación de Ollama. Necesaria si usas la función de publicar modelos en la biblioteca de Ollama. Para uso normal y local no es critica.
Configuración

Variables de entorno de Ollama

Ollama se configura a traves de variables de entorno. Estas se pasan al contenedor con el flag -e o en la sección environment del docker-compose.

Variables de entorno de Ollama para Docker — mayo 2026
Variable Defecto Descripción
OLLAMA_HOST 127.0.0.1:11434 IP y puerto en que escucha la API. Usar 0.0.0.0 para aceptar conexiones externas al contenedor.
OLLAMA_MODELS /root/.ollama/models Ruta donde se almacenan los modelos descargados dentro del contenedor.
OLLAMA_NUM_PARALLEL 1 Número de peticiones de inferencia paralelas. Aumentar si tienes varios clientes simultáneos.
OLLAMA_MAX_LOADED_MODELS 1 Número máximo de modelos cargados en VRAM al mismo tiempo.
OLLAMA_NUM_CTX 2048 Tamaño de contexto por defecto para todos los modelos. Sobreescribible por petición.
OLLAMA_KEEP_ALIVE 5m Tiempo que un modelo permanece cargado en memoria sin peticiones. Usar -1 para mantenerlo siempre cargado.
OLLAMA_DEBUG false Habilita logs detallados de depuración. Útil para diagnosticar problemas de carga de modelos.
OLLAMA_ORIGINS * Orígenes CORS permitidos. Restringir en producción a los dominios concretos de tu aplicación.

Ejemplo con múltiples variables

docker run -d \
  --name ollama \
  --gpus all \
  -v ollama:/root/.ollama \
  -p 11434:11434 \
  -e OLLAMA_HOST=0.0.0.0:11434 \
  -e OLLAMA_NUM_PARALLEL=4 \
  -e OLLAMA_MAX_LOADED_MODELS=2 \
  -e OLLAMA_KEEP_ALIVE=10m \
  -e OLLAMA_NUM_CTX=4096 \
  ollama/ollama
Orquestación

Docker Compose: Ollama con un fichero declarativo

Docker Compose permite definir toda la configuración en un fichero YAML versionable. Es la forma recomendada para entornos de desarrollo compartido y para que el setup sea reproducible entre maquinas.

docker-compose.yml básico con GPU NVIDIA

services:
  ollama:
    image: ollama/ollama:latest
    container_name: ollama
    restart: unless-stopped
    ports:
      - "11434:11434"
    volumes:
      - ollama_data:/root/.ollama
    environment:
      - OLLAMA_HOST=0.0.0.0:11434
      - OLLAMA_NUM_PARALLEL=2
      - OLLAMA_KEEP_ALIVE=10m
    deploy:
      resources:
        reservations:
          devices:
            - driver: nvidia
              count: all
              capabilities: [gpu]

volumes:
  ollama_data:

Guarda este fichero como docker-compose.yml y ejecuta docker compose up -d para arrancar el servicio en segundo plano. Para detenerlo usa docker compose down. Los modelos en el volumen ollama_data persisten aunque uses docker compose down -v solo si no eliminas el volumen explícitamente.

docker-compose.yml para GPU AMD (ROCm)

services:
  ollama:
    image: ollama/ollama:rocm
    container_name: ollama
    restart: unless-stopped
    ports:
      - "11434:11434"
    volumes:
      - ollama_data:/root/.ollama
    devices:
      - /dev/kfd
      - /dev/dri
    environment:
      - OLLAMA_HOST=0.0.0.0:11434
      - OLLAMA_KEEP_ALIVE=10m
      # Descomentar para GPUs que necesiten override de version
      # - HSA_OVERRIDE_GFX_VERSION=11.0.0

volumes:
  ollama_data:

Comandos de gestión con docker compose

# Arrancar en segundo plano
docker compose up -d

# Ver logs en tiempo real
docker compose logs -f ollama

# Descargar un modelo
docker compose exec ollama ollama pull llama3.2

# Listar modelos instalados
docker compose exec ollama ollama list

# Reiniciar el servicio
docker compose restart ollama

# Detener sin eliminar el volumen
docker compose down

# Ver el uso de VRAM de la GPU
docker compose exec ollama nvidia-smi
Interfaz web

Docker Compose con Open WebUI

Open WebUI es la interfaz gráfica de referencia para Ollama: chat estilo ChatGPT, gestión de modelos, historial de conversaciones y herramientas RAG. Este docker-compose levanta ambos servicios con un solo comando.

services:
  ollama:
    image: ollama/ollama:latest
    container_name: ollama
    restart: unless-stopped
    volumes:
      - ollama_data:/root/.ollama
    environment:
      - OLLAMA_HOST=0.0.0.0:11434
      - OLLAMA_NUM_PARALLEL=2
      - OLLAMA_KEEP_ALIVE=10m
    deploy:
      resources:
        reservations:
          devices:
            - driver: nvidia
              count: all
              capabilities: [gpu]
    networks:
      - ai-network

  open-webui:
    image: ghcr.io/open-webui/open-webui:main
    container_name: open-webui
    restart: unless-stopped
    ports:
      - "3000:8080"
    volumes:
      - webui_data:/app/backend/data
    environment:
      - OLLAMA_BASE_URL=http://ollama:11434
      - WEBUI_AUTH=true
      - ENABLE_SIGNUP=false
      - WEBUI_SECRET_KEY=cambia-esto-por-un-valor-aleatorio-largo
    depends_on:
      - ollama
    networks:
      - ai-network

networks:
  ai-network:
    driver: bridge

volumes:
  ollama_data:
  webui_data:

Con este fichero, Ollama y Open WebUI se comunican a través de la red interna ai-network usando el nombre de servicio como hostname (http://ollama:11434). El puerto 11434 de Ollama no se expone al host en esta configuración: solo Open WebUI puede acceder a la API de Ollama, lo que es más seguro.

Open WebUI estará disponible en http://localhost:3000. El primer usuario que se registre se convierte en administrador. Activa ENABLE_SIGNUP=false después del primer registro para evitar que otros usuarios creen cuentas.

Interfaz tipo ChatGPT
Conversaciones con historial, soporte de markdown, bloques de código, subida de archivos e imágenes para modelos multimodales.
Multi-usuario
Soporte para varios usuarios con roles y permisos. Cada usuario tiene su propio historial y puede personalizar los parámetros del modelo.
RAG integrado
Sube documentos PDF, Word o texto plano y el sistema los indexa automáticamente para usar en conversaciones con recuperación semántica.
Despliegue seguro

Uso de Ollama en producción con Docker

Consideraciones de seguridad, rendimiento y disponibilidad para entornos de producción donde Ollama atiende peticiones reales de usuarios o pipelines automatizados.

Proxy inverso con autenticación básica (nginx)

Ollama no tiene autenticación nativa. Si necesitas exponerlo fuera de la red local, pon un proxy inverso delante:

# nginx.conf (fragmento relevante)
server {
    listen 443 ssl;
    server_name ollama.tudominio.com;

    ssl_certificate     /etc/letsencrypt/live/ollama.tudominio.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/ollama.tudominio.com/privkey.pem;

    auth_basic           "Ollama API";
    auth_basic_user_file /etc/nginx/.htpasswd;

    location / {
        proxy_pass         http://ollama:11434;
        proxy_set_header   Host $host;
        proxy_set_header   X-Real-IP $remote_addr;
        proxy_read_timeout 300s;   # timeout largo para inferencias lentas
        proxy_buffering    off;    # necesario para streaming
    }
}

docker-compose.yml de producción completo

services:
  ollama:
    image: ollama/ollama:latest
    container_name: ollama
    restart: always
    volumes:
      - ollama_data:/root/.ollama
    environment:
      - OLLAMA_HOST=0.0.0.0:11434
      - OLLAMA_NUM_PARALLEL=4
      - OLLAMA_MAX_LOADED_MODELS=2
      - OLLAMA_KEEP_ALIVE=-1
      - OLLAMA_NUM_CTX=4096
      - OLLAMA_ORIGINS=https://tuapp.com
    deploy:
      resources:
        reservations:
          devices:
            - driver: nvidia
              count: all
              capabilities: [gpu]
    networks:
      - internal
    # Sin exposicion directa de puertos al exterior
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:11434/"]
      interval: 30s
      timeout: 10s
      retries: 3

  nginx:
    image: nginx:alpine
    container_name: nginx-proxy
    restart: always
    ports:
      - "443:443"
      - "80:80"
    volumes:
      - ./nginx.conf:/etc/nginx/conf.d/default.conf:ro
      - /etc/letsencrypt:/etc/letsencrypt:ro
    networks:
      - internal
      - external
    depends_on:
      - ollama

networks:
  internal:
    driver: bridge
    internal: true   # solo accesible desde los contenedores, no desde el host
  external:
    driver: bridge

volumes:
  ollama_data:

Descarga automática de modelos al arrancar

# Script de inicializacion: init-models.sh
#!/bin/bash
set -e

echo "Esperando a que Ollama esté listo..."
until curl -sf http://ollama:11434/ > /dev/null; do
  sleep 2
done

echo "Descargando modelos..."
curl -X POST http://ollama:11434/api/pull \
  -H "Content-Type: application/json" \
  -d '{"model": "llama3.2:3b"}'

curl -X POST http://ollama:11434/api/pull \
  -H "Content-Type: application/json" \
  -d '{"model": "nomic-embed-text"}'

echo "Modelos listos."

Puedes ejecutar este script como un contenedor init en docker-compose usando depends_on con condition service_healthy, o como un cron job que verifica periódicamente que los modelos necesarios estén disponibles.

Preguntas frecuentes

Preguntas frecuentes sobre Ollama en Docker

Necesitas instalar el NVIDIA Container Toolkit en el host y arrancar el contenedor con --gpus=all. En docker-compose, usa la sección deploy.resources.reservations.devices con driver nvidia y capabilities ["gpu"]. Verifica la instalación con docker run --rm --gpus all nvidia/cuda:12.3-base nvidia-smi.

Ollama guarda los modelos en /root/.ollama/models dentro del contenedor. Para persistirlos, monta un volumen Docker en esa ruta: -v ollama:/root/.ollama. Sin este volumen, los modelos se pierden cuando eliminas el contenedor. Un modelo de 3B cuantizado ocupa aproximadamente 2 GB; uno de 70B sin cuantizar puede superar los 40 GB.

La imagen base ollama/ollama:latest incluye soporte para NVIDIA CUDA y CPU. La imagen ollama/ollama:rocm incluye soporte para GPUs AMD usando la plataforma ROCm. Si tienes una GPU AMD (RX 6000, RX 7000, RX 9000 o Instinct) usa la versión :rocm. Para NVIDIA o CPU usa la imagen base. No existe una imagen que soporte ambas GPUs simultáneamente.

En docker-compose, los servicios se comunican por nombre de servicio. Si tu servicio se llama ollama, la URL de la API desde otro contenedor en la misma red es http://ollama:11434. Asegúrate de que ambos servicios están en la misma red Docker y de que Ollama tenga configurado OLLAMA_HOST=0.0.0.0:11434 para escuchar en todas las interfaces.

Sí. Ollama funciona en modo CPU sin ningún cambio en la imagen. Simplemente omite el flag --gpus y la sección deploy en docker-compose. La inferencia será más lenta: en CPU puro, un modelo de 3B genera entre 2 y 10 tokens por segundo dependiendo del hardware. Los modelos de 1B-3B cuantizados (Qwen 2.5 1.5B, Llama 3.2 1B) son los más adecuados para entornos sin GPU.

Tienes dos opciones: ejecutar directamente en el contenedor con docker exec -it ollama ollama pull llama3.2, o usar la API REST desde fuera del contenedor con curl -X POST http://localhost:11434/api/pull -d '{"model": "llama3.2"}'. La segunda opción es más adecuada para scripts de automatización y admite seguimiento del progreso a través del streaming de la respuesta.

Explora la API REST de Ollama

Aprende a usar todos los endpoints de Ollama: generate, chat, embeddings, gestión de modelos y compatibilidad con OpenAI. Con ejemplos en Python, JavaScript y curl.

Ver referencia completa de la API
Guía gratuita

Crea tu primer agente de IA, paso a paso

Descarga la guía en PDF: 12 secciones, ejemplos reales y datos de 2026. Gratis.