Instalar o Ollama no Docker: CPU, GPU, volumes e API
Um caminho prático para executar o Ollama no Docker sem perder modelos, confundir a rede do host com a do contêiner ou expor uma API local por acidente.
Neste guia
- O que muda ao executar o Ollama no Docker
- Escolher CPU, NVIDIA GPU ou AMD GPU
- Criar armazenamento persistente para modelos
- Iniciar o contêiner e verificar a API
- Conectar aplicativos sem confundir localhost
- Manter modelos, contexto e exposição mais seguros
- Diagnosticar falhas de saúde, GPU, volume e API
- Perguntas frequentes sobre Ollama no Docker
A expressão instalar o Ollama no Docker normalmente esconde três decisões diferentes: onde os arquivos dos modelos ficarão, como o contêiner alcançará o host ou outro serviço e se ele usará CPU ou uma GPU disponível. Comece pelo menor caminho funcional. Execute a imagem oficial do Ollama com um volume nomeado, verifique a API local e só depois adicione flags de GPU ou um segundo aplicativo.
O que muda ao executar o Ollama no Docker
O Ollama normalmente se comporta como um serviço local: um comando inicia o runtime, os modelos ficam na máquina e os clientes chamam a porta 11434. O Docker envolve esse serviço em um contêiner com seu próprio sistema de arquivos, namespace de processos, regras de rede e ciclo de vida. Isso facilita uma implantação repetível, mas também significa que um modelo baixado dentro do contêiner pode desaparecer quando ele for removido, caso /root/.ollama não esteja respaldado por um volume.
Por isso, um comando Docker que funciona não é a configuração completa. Decida se o Docker será o único runtime do Ollama, se um aplicativo no host ou outro contêiner irá chamá-lo e se os modelos baixados devem sobreviver às atualizações. Deixe essas fronteiras claras antes de adicionar OpenCode, um host MCP, uma interface web ou um cliente remoto.
O ciclo de vida do contêiner não é o armazenamento dos modelos
Remover um contêiner só é seguro quando o diretório dos modelos está fora da camada gravável dele. Um volume nomeado ou um bind mount escolhido conscientemente é o que torna persistente uma implantação do Ollama no Docker.
Escolher CPU, NVIDIA GPU ou AMD GPU
Use primeiro o caminho de CPU ao validar a rede, os volumes ou um host novo. Ele tem menos variáveis e oferece uma base limpa para comparar o tempo de carregamento do modelo e a velocidade das respostas. Quando a API funcionar, troque para o comando específico do acelerador documentado para seu host, em vez de copiar flags Docker aleatórias de outro runtime.
Contêineres NVIDIA normalmente dependem de um driver funcional no host e do NVIDIA Container Toolkit. Implantações AMD podem usar outra tag de imagem e outro mapeamento de dispositivos; o suporte depende do sistema operacional, do runtime e das instruções atuais do Ollama. Trate a GPU como uma camada de otimização: ela não deve mudar o endpoint, o caminho do volume ou as verificações básicas de saúde.
docker version
docker run --rm --gpus=all nvidia/cuda:12.0.0-base-ubuntu22.04 nvidia-smi
| Caminho | Use quando | Verificação importante |
|---|---|---|
| CPU | Você quer a base mais simples ou não tem um acelerador compatível | Confirme a API e a resposta do modelo antes de ajustar o desempenho |
| NVIDIA GPU | O driver do host e o NVIDIA Container Toolkit já estão funcionando | Verifique se o Docker enxerga a GPU antes de baixar um modelo grande |
| AMD GPU | O host e a imagem do Ollama suportam o caminho ROCm necessário | Siga os requisitos atuais de imagem e dispositivos para esse host |
| Host e contêiner | Outro serviço precisa chamar o Ollama pela rede Docker | Use o nome do serviço na rede, não o endereço de loopback do host |
Criar armazenamento persistente para modelos
Um volume nomeado é o padrão mais simples para instalar o Ollama no Docker, porque o Docker administra o local e o contêiner pode ser substituído sem mover os modelos manualmente. A imagem oficial armazena os dados do Ollama em /root/.ollama; monte o volume sempre nesse caminho. Não crie um volume na primeira execução e outro na atualização, a menos que queira deliberadamente uma biblioteca nova.
Um bind mount pode ser útil para acompanhar o uso de disco, fazer backup de um diretório conhecido do host ou colocar os modelos em uma unidade específica. Ele também cria mais decisões de permissão e caminho. Na primeira implantação, um volume nomeado costuma ser mais fácil de explicar e mais difícil de quebrar.
Não confunda volume com backup
Um volume Docker protege os modelos contra a troca do contêiner, mas não é automaticamente uma segunda cópia. Faça backup ou recrie o volume de forma planejada se a biblioteca de modelos for 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 o contêiner e verificar a API
Depois que docker run retornar um ID de contêiner, verifique o estado antes de baixar um modelo grande. docker ps mostra se o processo continua rodando; docker logs pode revelar erros de porta, permissão ou runtime. Em seguida, consulte /api/tags a partir do host. Uma resposta bem-sucedida confirma que o endpoint HTTP está acessível, mas não que todos os modelos foram carregados ou que todo cliente tem permissão para usá-los.
Faça uma solicitação com um modelo pequeno como segunda verificação. Assim você separa um listener HTTP saudável de um caminho de modelo funcional. Se a API responder, mas a solicitação do modelo falhar, verifique o nome do modelo, o espaço em disco, a memória e os logs do contêiner antes de mudar as configurações de rede.
-
Verificar o processo
Confirme que o contêiner está Up e que a porta publicada é a que você pretendia expor.
-
Verificar o endpoint
Solicite /api/tags na mesma máquina que publicou a porta 11434 e registre o código de resposta.
-
Verificar um modelo
Baixe ou use um modelo pequeno e execute um prompt simples antes de conectar um editor ou 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 aplicativos sem confundir localhost
A URL correta do Ollama depende do local onde o cliente executa. Um aplicativo desktop no mesmo host pode normalmente chamar http://127.0.0.1:11434 quando o Docker publica a porta. Outro contêiner na mesma rede Docker deve chamar o serviço Ollama pelo nome do serviço no Compose e pela porta, por exemplo http://ollama:11434. Dentro de um contêiner, 127.0.0.1 significa o próprio contêiner; não significa automaticamente o host Windows, macOS ou Linux.
Para um cliente remoto, use um endereço protegido e uma regra de firewall explícitos. Não publique a porta 11434 na internet apenas para conectar um aplicativo de teste. Se o cliente precisar de um endpoint remoto, documente a rota, a autenticação ou a fronteira da rede privada e o serviço de modelos exato ao qual ele poderá acessar.
| Local do cliente | Endpoint típico | Erro comum |
|---|---|---|
| Desktop no host | http://127.0.0.1:11434 | Usar o nome do serviço do contêiner em um aplicativo do host |
| Outro serviço Compose | http://ollama:11434 | Usar localhost, que aponta de volta para o contêiner chamador |
| Outra máquina | Endereço privado do host protegido por firewall | Publicar uma API sem autenticação em uma interface pública |
| Odysseus ou um editor | Endpoint exigido pelas configurações do provedor do aplicativo | Mudar o endpoint antes de a verificação básica da API passar |
Manter modelos, contexto e exposição mais seguros
O Docker não torna um serviço Ollama privado automaticamente. Uma porta publicada pode ser vinculada a todas as interfaces, dependendo do comando e dos padrões do host. Para um teste somente no host, prefira um bind de loopback como -p 127.0.0.1:11434:11434 quando nenhuma outra máquina precisar acessar. Se um serviço Compose precisar da API internamente, mantenha-o em uma rede privada e não publique uma porta no host sem necessidade.
O tamanho do contexto, a concorrência e a memória da GPU podem alterar a quantidade de RAM ou VRAM usada pelo contêiner. Aumente uma variável por vez e observe docker stats, a memória do host e o comportamento das respostas. Mantenha segredos fora das imagens, do histórico do shell, das capturas de tela e dos arquivos Compose versionados; um endpoint de modelo local e uma ferramenta de busca de terceiros têm limites de privacidade diferentes.
| Verificação | Por que importa | Padrão mais seguro |
|---|---|---|
| Vinculação da porta | Define quais interfaces podem alcançar a API | Vincular ao loopback em testes somente no host |
| Caminho do volume | Define se os modelos sobrevivem à troca do contêiner | Usar um volume nomeado e documentá-lo |
| Contexto e concorrência | Podem multiplicar o uso de memória durante as solicitações | Começar pequeno e medir antes de aumentar os limites |
| Ferramentas externas | Podem enviar prompts ou conteúdo recuperado para fora do host | Revisar o provedor e manter as permissões restritas |
Diagnosticar falhas de saúde, GPU, volume e API
Quando uma implantação do Ollama no Docker falhar, altere uma camada por vez. Primeiro verifique se o Docker consegue iniciar um contêiner simples. Depois confirme que o contêiner Ollama continua em execução. Em seguida, verifique o volume, a API, o modelo e, por fim, o aplicativo cliente. Substituir o comando inteiro após cada erro esconde a fronteira que realmente falhou.
Falhas de GPU geralmente estão no runtime do host, não na API do Ollama. Um contêiner pode responder a /api/tags e ainda usar CPU porque a GPU não foi repassada, o driver é incompatível ou a imagem escolhida não corresponde ao host. Se um modelo sumir depois de recriar o contêiner, compare a saída de docker inspect e o destino montado antes de baixá-lo novamente.
Remover o contêiner não é o mesmo que excluir o volume
O último comando remove apenas o contêiner. Não execute docker volume rm ollama-data até confirmar que os modelos não são mais necessários ou que foram copiados.
docker inspect ollama
docker stats ollama
docker stop ollama && docker rm ollama
| Sintoma | Limite provável | Próxima verificação |
|---|---|---|
| O contêiner encerra imediatamente | Imagem, comando, permissões ou runtime | Ler docker logs ollama e verificar o código de saída |
| Conexão com a API recusada | Vinculação da porta ou saúde do processo | Verificar docker ps, portas publicadas e /api/tags |
| O modelo desapareceu | Volume errado ou ausente | Comparar os mounts de docker inspect com o destino /root/.ollama |
| A flag de GPU falha | Driver do host ou runtime do contêiner | Executar o menor teste de GPU do fornecedor antes do Ollama |
| Funciona no host, mas não no contêiner | Namespace de rede | Trocar localhost pelo nome do serviço Compose |
| As solicitações usam memória demais | Contexto, concorrência ou tamanho do modelo | Reduzir uma configuração e observar as métricas do host e do contêiner |
Perguntas frequentes sobre Ollama no Docker
Referências oficiais
- Documentação do Ollama Docker - Imagens oficiais de contêiner e orientações de implantação Docker
- Documentação da API do Ollama - Referência oficial de endpoints e solicitações
- Suporte a GPU no Docker Compose - Orientações oficiais sobre reserva de GPU e Compose
Guias relacionados de configuração de IA local
- Configuração do Odysseus AI com Docker - Guia para implantar o espaço de trabalho completo do Odysseus AI com foco em Docker.
- Configuração do Odysseus AI com Ollama - Conecte um runtime Ollama existente ao Odysseus sem misturar endpoints do host e do contêiner.
- Servidor MCP do Ollama - Separe a inferência local das ferramentas MCP, aprovações e chamadas de rede externas.
- Ollama Web Search - Compare o comportamento da API Web Search hospedada com caminhos locais e auto-hospedados.
- Configuração do OpenCode com Ollama - Use um endpoint Ollama em contêiner em um fluxo de trabalho local com agente de código.
Última atualização: 22 de agosto de 2026
Voltar à página inicial