Contenido

Tutorial de Ollama en Docker: GPU NVIDIA y AMD con Compose

En un servidor, ejecutar Ollama con Docker facilita su administración y actualización, y también permite desplegarlo con otros servicios mediante Compose. Si aún no conoces Docker, consulta primero el tutorial de Docker.

Docker en macOS no puede usar la GPU de Apple. En Mac, instala directamente la aplicación de Ollama.

Solo CPU

docker run -d --name ollama \
  -v ollama:/root/.ollama \
  -p 11434:11434 \
  ollama/ollama
  • -v ollama:/root/.ollama: los modelos se guardan en el Volume llamado ollama y no se pierden al recrear el contenedor.
  • -p 11434:11434: permite que el host se conecte a la API.

GPU NVIDIA

1. Instala NVIDIA Container Toolkit

Primero instala los controladores de NVIDIA en el host y, después, NVIDIA Container Toolkit (estos pasos son para Ubuntu; consulta la documentación oficial de NVIDIA para obtener instrucciones detalladas):

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
sudo apt-get update
sudo apt-get install -y nvidia-container-toolkit
sudo nvidia-ctk runtime configure --runtime=docker
sudo systemctl restart docker

2. Inicia el contenedor

docker run -d --name ollama --gpus=all \
  -v ollama:/root/.ollama \
  -p 11434:11434 \
  --restart unless-stopped \
  ollama/ollama

Comprueba que se esté usando la GPU:

docker exec ollama nvidia-smi

GPU AMD

Usa la imagen de la versión rocm y pasa los dispositivos al contenedor:

docker run -d --name ollama \
  --device /dev/kfd --device /dev/dri \
  -v ollama:/root/.ollama \
  -p 11434:11434 \
  ollama/ollama:rocm

Usa Ollama en el contenedor

docker exec -it ollama ollama run qwen3:8b
docker exec ollama ollama pull nomic-embed-text
docker exec ollama ollama list

La API funciona igual que en una instalación local: http://localhost:11434.

Variables de entorno

Pasa las variables de entorno con -e. Dentro del contenedor, OLLAMA_HOST ya tiene el valor predeterminado 0.0.0.0, así que el host podrá conectarse cuando mapees el puerto con -p:

docker run -d --gpus=all --name ollama \
  -e OLLAMA_CONTEXT_LENGTH=8192 \
  -e OLLAMA_KEEP_ALIVE=30m \
  -v ollama:/root/.ollama -p 127.0.0.1:11434:11434 \
  ollama/ollama

127.0.0.1:11434:11434 solo permite conexiones locales, lo que evita exponer la API a la red.

Docker Compose: Ollama + Open WebUI

services:
  ollama:
    image: ollama/ollama
    volumes:
      - ollama:/root/.ollama
    environment:
      OLLAMA_KEEP_ALIVE: 30m
    deploy:
      resources:
        reservations:
          devices:
            - driver: nvidia
              count: all
              capabilities: [gpu]
    restart: unless-stopped

  open-webui:
    image: ghcr.io/open-webui/open-webui:main
    ports:
      - "3000:8080"
    environment:
      OLLAMA_BASE_URL: http://ollama:11434
    volumes:
      - open-webui:/app/backend/data
    depends_on:
      - ollama
    restart: unless-stopped

volumes:
  ollama:
  open-webui:
docker compose up -d
docker compose exec ollama ollama pull qwen3:8b

Abre http://localhost:3000 para usar la interfaz web. Ollama no publica ningún puerto al exterior; solo Open WebUI puede conectarse a él a través de la red de Compose. Si no tienes una GPU NVIDIA, elimina el bloque deploy.

Consulta cómo usar Open WebUI en La interfaz web de Open WebUI.

Actualización

docker pull ollama/ollama
docker rm -f ollama
# Vuelve a crearlo con el comando docker run original; los modelos están en el Volume, así que no es necesario descargarlos de nuevo

Si usas Compose:

docker compose pull
docker compose up -d

Descarga modelos de antemano

Para descargar automáticamente un modelo al iniciar el contenedor, añade esto al script de despliegue:

docker exec ollama ollama pull qwen3:8b

También puedes incluir el modelo directamente en una imagen personalizada (la imagen será muy grande, por lo que normalmente no se recomienda).

Actualizado 12 de octubre de 2026