Como Instalar Ollama e Open WebUI com Docker Compose: Guia Passo a Passo com Nemotron-3-Nano 30B
Docker · Ollama · Open WebUI · LLM Local · NVIDIA Nemotron · IA sem custos de API | ✎ Duarte Spínola | 27 de Abril de 2026
O Ollama é o servidor que corre modelos de linguagem localmente. O Open WebUI é a interface web que transforma essa capacidade numa experiência idêntica ao ChatGPT — com histórico de conversas, gestão de modelos e suporte a múltiplos utilizadores. Combinados através de Docker Compose, ficam prontos em minutos. Este guia cobre a configuração completa e o carregamento do modelo NVIDIA Nemotron-3-Nano 30B — um modelo MoE híbrido com 31.6B parâmetros totais, 3.5B activos por token, contexto de 1 milhão de tokens, e apenas 24 GB de espaço em disco.
ℹ O que é o Nemotron-3-Nano 30B
Desenvolvido pela NVIDIA, o Nemotron-3-Nano usa uma arquitectura Mixture-of-Experts (MoE) híbrida — tem 30B parâmetros totais mas activa apenas 3.5B por token, tornando-o eficiente em termos de VRAM. Suporta raciocínio passo a passo (chain-of-thought), ferramentas (tool use) e tem uma janela de contexto de 1 milhão de tokens. Licença NVIDIA Open Model — uso comercial permitido.
Neste artigo
1. Pré-requisitos
| Requisito | Detalhe |
|---|---|
| Docker Engine + Docker Compose | Docker 24+ com docker compose (v2). No Windows usar Docker Desktop com WSL2. |
| RAM / VRAM para o modelo | nemotron-3-nano:30b requer ~24 GB. Em CPU: 32 GB RAM. Em GPU NVIDIA: 24 GB VRAM (RTX 3090/4090, A5000). Apple Silicon: 32 GB de RAM unificada. |
| Espaço em disco | ~30 GB livres — 24 GB para o modelo + imagens Docker (~6 GB) |
| GPU NVIDIA (opcional mas recomendado) | Para acelerar com GPU: NVIDIA Container Toolkit instalado no host Linux/WSL2 |
⚠ Hardware sem GPU dedicada
Sem GPU, o Ollama corre o modelo em CPU — funciona mas é lento (1–5 tokens/segundo). Para uso quotidiano sem GPU, considerar o modelo mais leve nemotron-3-nano:4b (2.8 GB, 8 GB RAM) ou qwen2.5:7b.
2. Estrutura dos Ficheiros
Criar uma pasta dedicada para o projecto — todos os ficheiros ficam aqui:
mkdir ~/ollama-webui && cd ~/ollama-webui
# A estrutura final será:
ollama-webui/
└── docker-compose.yml
# Os modelos e dados do Open WebUI ficam em volumes Docker (fora desta pasta)
3. Criar o Ficheiro docker-compose.yml
Criar o ficheiro docker-compose.yml com o seguinte conteúdo. Estão disponíveis três variantes — escolher a adequada ao hardware:
Variante A — CPU apenas (sem GPU)
services:
ollama:
image: ollama/ollama:latest
container_name: ollama
ports:
– “11434:11434” # API Ollama — acessível em localhost:11434
volumes:
– ollama_data:/root/.ollama # modelos persistentes
restart: unless-stopped
open-webui:
image: ghcr.io/open-webui/open-webui:main
container_name: open-webui
ports:
– “3000:8080” # interface web em http://localhost:3000
volumes:
– open_webui_data:/app/backend/data
environment:
– OLLAMA_BASE_URL=http://ollama:11434 # endereço interno do serviço ollama
extra_hosts:
– “host.docker.internal:host-gateway”
depends_on:
– ollama
restart: unless-stopped
volumes:
ollama_data:
open_webui_data:
Variante B — GPU NVIDIA
services:
ollama:
image: ollama/ollama:latest
container_name: ollama
ports:
– “11434:11434”
volumes:
– ollama_data:/root/.ollama
deploy:
resources:
reservations:
devices:
– driver: nvidia
count: all # usar todas as GPUs disponíveis
capabilities: [gpu]
restart: unless-stopped
open-webui:
image: ghcr.io/open-webui/open-webui:main
container_name: open-webui
ports:
– “3000:8080”
volumes:
– open_webui_data:/app/backend/data
environment:
– OLLAMA_BASE_URL=http://ollama:11434
extra_hosts:
– “host.docker.internal:host-gateway”
depends_on:
– ollama
restart: unless-stopped
volumes:
ollama_data:
open_webui_data:
Variante C — Container único com Ollama + Open WebUI integrados
Opção mais simples — um único container contém ambos os serviços. Recomendado para testes rápidos ou hardware sem GPU.
docker run -d -p 3000:8080 \
-v ollama_data:/root/.ollama \
-v open_webui_data:/app/backend/data \
–name open-webui \
–restart always \
ghcr.io/open-webui/open-webui:ollama
ℹ Porque dois containers separados são preferíveis
Com o Docker Compose (Variantes A e B), o Ollama e o Open WebUI podem ser actualizados e reiniciados independentemente — uma actualização ao Open WebUI não afecta os modelos carregados. O Ollama funciona sem o Open WebUI. Os recursos de CPU/RAM podem ser limitados por container de forma independente.
4. Iniciar os Containers
Na pasta onde está o docker-compose.yml, executar:
docker compose up -d
# Verificar que os dois containers estão a correr
docker ps
# Ver os logs em tempo real (Ctrl+C para sair)
docker compose logs -f
O output esperado do docker ps:
a1b2c3d4e5f6 ghcr.io/open-webui/open-webui:main Up 30 seconds 0.0.0.0:3000->8080/tcp open-webui
f6e5d4c3b2a1 ollama/ollama:latest Up 31 seconds 0.0.0.0:11434->11434/tcp ollama
5. Descarregar o Modelo Nemotron-3-Nano 30B
O Ollama corre dentro do container. Para descarregar e carregar modelos, é necessário entrar no container com docker exec e executar os comandos Ollama a partir de dentro.
Descarregar e iniciar o Nemotron-3-Nano 30B
docker exec -it ollama ollama run nemotron-3-nano:30b
Este comando faz duas coisas em simultâneo: se o modelo não existir localmente, descarrega-o primeiro (~24 GB — pode demorar vários minutos dependendo da largura de banda); quando o download termina, abre uma sessão de chat interactivo no terminal. O output durante o download:
pulling b725f1117407… ████████████████████ 24 GB 5.2 MB/s ~45 min
pulling bca58c750377… ████████████████████ 10 kB
verifying sha256 digest
writing manifest
success
>>> Send a message (/? for help)
Quando aparece o prompt >>>, o modelo está pronto. Escrever uma mensagem de teste e premir Enter para verificar que responde. Para sair da sessão de chat, escrever /bye ou usar Ctrl+D.
✓ Apenas descarregar sem abrir chat (pull)
Para descarregar o modelo sem abrir uma sessão interactiva — útil em scripts ou quando se quer pré-carregar em background:
ℹ Diferença entre docker exec -it e docker exec
-it activa o modo interactivo (terminal com stdin/stdout ligados) — necessário para comandos que esperam input do utilizador como o ollama run (que abre um chat). Sem -it, o comando executa em background sem interacção — adequado para ollama pull e ollama list.
6. Aceder ao Open WebUI e Iniciar Conversa
|
1
|
Abrir o browser e navegar para http://localhost:3000 |
|
2
|
Na primeira visita: criar uma conta de administrador (apenas local — os dados ficam no container) |
|
3
|
No topo da interface, clicar no selector de modelo e escolher nemotron-3-nano:30b (aparece automaticamente após o pull) |
|
4
|
Escrever uma mensagem no campo de chat e premir Enter — o modelo responde directamente na interface |
⚠ O modelo não aparece no selector do Open WebUI
Se o modelo não aparecer após o pull, verificar a ligação entre o Open WebUI e o Ollama em Definições → Connections → Ollama API. O URL deve ser http://ollama:11434 (nome do serviço Docker, não localhost). Se estiver incorreto, corrigir e clicar em Refresh.
7. Gerir Modelos Adicionais
O mesmo procedimento de docker exec serve para qualquer modelo disponível no Ollama. Outros modelos recomendados:
| Modelo | Tamanho | Comando docker exec |
|---|---|---|
| nemotron-3-nano:4b | 2.8 GB | docker exec -it ollama ollama run nemotron-3-nano:4b |
| qwen2.5:7b | 4.7 GB | docker exec -it ollama ollama run qwen2.5:7b |
| qwen2.5:14b | 9 GB | docker exec -it ollama ollama run qwen2.5:14b |
| gemma3:12b | 8.1 GB | docker exec -it ollama ollama run gemma3:12b |
Listar e remover modelos
docker exec ollama ollama list
# Ver detalhes de um modelo (tamanho, parâmetros, quantização)
docker exec ollama ollama show nemotron-3-nano:30b
# Remover um modelo para libertar espaço em disco
docker exec ollama ollama rm nemotron-3-nano:30b
8. Comandos Úteis de Manutenção
docker compose stop
# Retomar os serviços
docker compose start
# Actualizar as imagens (Ollama e Open WebUI) para a versão mais recente
docker compose pull
docker compose up -d
# Ver logs do Ollama
docker compose logs -f ollama
# Ver logs do Open WebUI
docker compose logs -f open-webui
# Ver consumo de recursos em tempo real
docker stats ollama open-webui
# Remover tudo (containers + redes) mas MANTER os modelos e dados do WebUI
docker compose down
# Remover tudo INCLUINDO volumes (APAGA modelos e histórico de conversas)
docker compose down -v
9. Resolução de Problemas Comuns
| Problema | Causa | Solução |
|---|---|---|
| Open WebUI não carrega em localhost:3000 | Container não está em execução ou a iniciar | Verificar docker ps e docker compose logs open-webui |
| Nenhum modelo no selector do Open WebUI | Open WebUI não consegue ligar ao Ollama — URL errado ou container ollama parado | Definições → Connections → Ollama API — confirmar URL http://ollama:11434 |
| GPU não detectada pelo Ollama | NVIDIA Container Toolkit não instalado ou configuração de GPU ausente no docker-compose | Instalar o toolkit e usar a Variante B do docker-compose. Verificar com docker exec ollama nvidia-smi |
| Download do modelo muito lento ou interrompido | Ligação de rede lenta ou instável — 24 GB é um download de longa duração | O Ollama retoma automaticamente downloads interrompidos — correr docker exec ollama ollama pull nemotron-3-nano:30b novamente |
| Respostas muito lentas (modo CPU) | Modelo a correr em CPU — normal em hardware sem GPU dedicada | Usar modelo mais pequeno: nemotron-3-nano:4b (2.8 GB) ou qwen2.5:7b |
Artigos relacionados no kbase.pt
