跳至主要内容

Docker Ollama:本地运行大语言模型,兼顾隐私与零成本

在 Docker 中设置 Ollama,本地运行 Llama、Mistral 等模型。保护您的数据隐私,消除 API 成本,构建可离线运行的 AI 应用。
· 9分钟 阅读

使用 AI 探索

多数开发者都想尝试本地 LLM,但常常不知从何入手。

开源模型(如 Llama 和 Mistral)的兴起让本地 AI 前所未有地易用。您无需为 OpenAI 或 Anthropic 花一分钱,也不用担心把数据发给第三方。挑战在于,多数安装指南涉及管理 Python 环境、CUDA 驱动和一堆在机器间迁移时容易出问题的依赖。

Ollama 提供了一种简单直接的方式,以最少的设置本地运行 LLM。若再配合 Docker,您就能得到一个干净、可移植、在不同系统上一致工作的方案。

在本指南中,我将演示如何在 Docker 中设置 Ollama、拉取您的第一个模型,并开始运行本地 LLM,使其可被任何应用访问。

如果您对 Docker 完全陌生,建议先学习我们的Docker 入门课程,掌握基础知识。

什么是 Ollama?

可以把 Ollama 看作是在您自有硬件上运行大语言模型的最简方式。

它是一个轻量级运行时,为本地 LLM 处理所有繁重工作。您无需管理 Python 环境、手动安装 CUDA 驱动,或自己搞清楚模型权重和分词器。只需一条命令,Ollama 就能下载、加载并服务如 LLaMA、Mistral、Gemma 等模型。

内置隐私保护。您的对话永不离开本机。无需 API 密钥、无需用量跟踪、更不会把数据发送到外部服务器。这使其非常适合处理敏感工作,避免将专有代码或个人信息暴露给第三方服务的风险。

这个工具首先为开发者而设计。它可在 macOS 和 Linux 上原生运行,提供简单的 REST API 以便集成,现在也能在 Docker 容器内工作。这意味着您可以在本地开发时使用相同的设置,并在任何可运行 Docker 的地方部署。

您将获得一个一条命令即可启动、可离线运行的生产级 LLM 服务。

Ollama 并非唯一的 LLM 运行时——也可以试试n8n 和 Qdrant。

为何将 Docker 与 Ollama 搭配使用?

答案很简单——您能充分利用 Ollama 的优势,同时保持系统干净整洁。

直接在本机运行 Ollama 也完全可行——它提供打包安装程序(Windows 为 .exe,Mac 为 .dmg)并替您处理一切。但 Docker 有一个关键优势:隔离。

使用 Docker 时,Ollama 在自己的容器中运行。这能保持宿主系统干净:不在主系统留下安装痕迹,测试完不会残留文件,想切换版本或彻底清理时也能轻松移除。

借助可复现性,团队中的每个人都能使用相同的设置。共享一条 Docker 命令,任何人都可运行完全一致的 Ollama 环境,无论是 macOS、Linux 还是 Windows。

借助跨平台支持,部署变得简单。同一容器既可在您的笔记本上运行,也能在云服务器、CI 流水线或同事的电脑上不经修改地工作。

通过简化的安装与拆除流程,您可以在数秒内启动 Ollama,也能同样快速地完全移除。无需卸载脚本、无需到处找配置文件、更不用手动清理系统。

这使 Docker 非常适合:

  • 在不进行完整安装的情况下测试不同模型
  • 构建与本地 LLM 集成的应用
  • 创建可由多个团队成员共享的开发环境
  • 在不想修改基础系统的服务器上运行 Ollama

简而言之,您能获得本地 LLM 的全部好处,而无需经历安装折腾。

想要更多实用的 Docker 资源?这份机器学习与 AI 的 12 个 Docker 容器镜像可以助您起步。

在 Docker 中设置 Ollama

在 Docker 中运行 Ollama,您只需三条命令。

首先,从 Docker Hub 拉取官方 Ollama 镜像:

docker pull ollama/ollama

Image 1 - Pulling the ollama image

拉取 ollama 镜像

接着,以正确的端口与卷映射运行容器:

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

Image 2 - Running ollama

运行 ollama

各参数含义如下:

  • -d 让容器在后台运行
  • --name my-ollama.docker 为容器指定易记名称
  • -p 11434:11434 将 Ollama 的默认端口映射到宿主机
  • -v ollama:/root/.ollama 为下载的模型创建持久化卷

容器会立刻启动,并在 http://localhost:11434 上监听。

Image 3 - Ollama running locally

Ollama 本地运行中

现在下载一个模型,验证一切正常:

docker exec -it my-ollama-docker  ollama pull llama3.1

Image 4 - Pulling the Llama3.1 model

拉取 Llama3.1 模型

这会在容器内下载 Llama 3.1 8b 模型。模型约 5 GB,下载可能需要几分钟。

您可以通过列出可用模型来验证设置:

docker exec -it my-ollama-docker ollama list

Image 5 - Listing available models

列出可用模型

卷映射非常重要。 没有它,容器停止后您会丢失所有已下载模型。通过 ollama:/root/.ollama 卷,模型可在容器重启与更新间持久保存。

在生产环境中,您可能希望构建预置模型的自定义镜像。创建一个 Dockerfile,在构建时下载模型:

FROM ollama/ollama
RUN ollama serve & sleep 5 && ollama pull llama3.1 && pkill ollama
CMD ["ollama", "serve"]

这样可将模型烘焙进镜像,新容器启动即刻可用。

通过 Docker 使用 Ollama

容器运行后,Ollama 就像其他 REST API 一样工作。

服务在 http://localhost:11434 监听,接受标准 HTTP 请求。无需专用客户端或 SDK——发送 JSON,即可获得响应。

下面用一条简单的 curl 命令生成文本:

curl http://localhost:11434/api/generate -d '{
  "model": "llama3.1",
  "prompt": "Why is the sky blue?",
  "stream": false
}'

使用 curl 访问 ollama

API 会返回包含生成文本的 JSON 响应。将 "stream": false 设为一次性返回完整结果,或设为 "stream": true 以流式接收生成的 token。

Python 集成同样简单:

import requests

response = requests.post(
    "http://localhost:11434/api/generate",
    json={
        "model": "llama3.1",
        "prompt": "Explain Docker containers in one sentence.",
        "stream": False,
    },
)

print(response.json()["response"])

Image 7 - Accessing ollama with Python

使用 Python 访问 ollama

这使 Ollama 非常适合作为本地应用的后端。您可以构建聊天界面、代码补全工具或文档分析系统,与容器化的 LLM 通信,而无需将数据发送至外部服务。

对于更复杂的工作流,LangChain 集成可直接使用:

from langchain_ollama import ChatOllama

llm = ChatOllama(model="llama3.1", base_url="http://localhost:11434")
response = llm.invoke("Explain the benefits of containerization in 2 sentences")
print(response)

Image 8 - Accessing ollama with LangChain

使用 LangChain 访问 ollama

您将以最简单的 HTTP 请求,获得本地 LLM 的全部能力。

想知道 LLM 应用如何部署?阅读我们的逐步指南:使用 Docker 部署 LLM 应用。

性能考量

本地 LLM 想要跑得好,需要相当给力的硬件,而 Docker 也会带来一定开销。

CPU 与 GPU 的差异巨大。 Ollama 可在仅有 CPU 的系统上运行,但推理会很慢——简单回答也可能需 30 秒以上。使用现代 GPU,同样的查询可在 5 秒内完成。NVIDIA GPU 效果最佳,但 Apple Silicon Mac 表现也不错,且性价比可能更高。

内存需求随模型大小线性增长。 小模型如 Llama3.1 8B 至少需要 8GB 系统内存,而更大的 70B 版本需要 64GB 或更多。模型在使用期间常驻内存,因此 8GB 内存的机器无法运行 13B 模型。

磁盘空间消耗很快。 每个模型都会占用数 GB 磁盘空间:

  • 7B 参数模型:4–8GB
  • 13B 参数模型:8–16GB  
  • 70B 参数模型:40–80GB

多个模型版本与量化会迅速成倍增加存储需求。若存储吃紧,可将模型迁移到外接硬盘。

容器的计算开销很小,但对存储有影响。基础 Ollama 镜像不足 1GB,但模型保存在 Docker 卷中。若构建预置模型的自定义镜像,每个镜像都会比基础镜像大数 GB。

不过,Docker 的内存分配可能需要关注。默认情况下,Docker Desktop 会限制容器内存。对于较大的模型,您需要提高这些限制,或在运行容器时使用 --memory 参数。

硬件瓶颈通常是内存,而非 CPU 或磁盘速度。

常见用例

Docker + Ollama 让您在保护数据隐私的同时,将 LLM 推理成本精确降至 $0(不含电力与维护成本)。

本地 AI 助手是这一组合的亮点。您可以创建代码补全工具、文档生成器或写作助手——全部在本机运行。没有 API 成本、没有速率限制、没有数据离开您的网络。只需将编辑器或 IDE 指向 localhost:11434,即可开始构建。

私有RAG 管道也变得更易部署。

您可以将公司文档加载至向量数据库,再用 Ollama 回答相关问题。整个知识库都保留在内网,这对法律、金融或任何不可接触外部 API 的专有信息尤为重要。

离线聊天机器人开发可在无需依赖互联网的情况下进行原型设计与测试。非常适合边缘部署、隔离网络环境,或连接不稳定的场景。无论联网与否,甚至在三万英尺高空,您的机器人都能以同样方式工作。

上云前的模型试验能省下大量金钱与时间。您可以在本地测试不同模型、提示与配置,再决定是否使用昂贵的云推理。在不消耗 API 额度的情况下完成基准测试、参数调优与输出验证。

团队还会将 Docker 与 Ollama 的组合用于:

  • 训练数据生成,当您需要大量合成文本时
  • 内容审核,在内部处理敏感材料  
  • 研究环境,强调可复现性与隔离性
  • 演示应用,无需外部依赖即可运行

您能以非企业级的账单,获得企业级的 AI 能力。

提示、限制与故障排查

在 Docker 中运行 Ollama 时,有一些容易踩的坑需要注意。

GPU 支持需要额外配置。 官方的 Ollama Docker 镜像支持 NVIDIA GPU,但您需要先安装 NVIDIA Container Toolkit,并在运行容器时加入 --gpus all 参数:

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

否则,Ollama 会回退到仅 CPU 模式,虽然可用但速度慢。如果您使用 Apple Silicon MacBook,则无需担心这一点。

文件权限问题可能会在 Docker 卷上引发麻烦。如果您挂载宿主目录而非使用命名卷,Ollama 可能因权限不匹配而无法写入模型文件。像 -v ollama:/root/.ollama 这样的命名卷可彻底避免该问题。

重启间的模型缓存在正确挂载卷时会自动工作。您下载的模型会保存在 Docker 卷中,停止并重启容器不需要重新下载。但如果意外删除了卷,或忘了加 -v 参数,就会丢失所有模型。

记住这些快速排查要点:

  • 容器无法启动?检查 11434 端口是否已被占用
  • 模型下载很慢?检查您的网络连接与 Docker 的资源分配
  • API 请求超时?为大模型提高 Docker 的内存上限
  • 未检测到 GPU?核对 NVIDIA 驱动与 Container Toolkit 安装

最常见的问题是忘了挂载卷,然后纳闷为何模型会消失。

结语

Docker 让本地运行 LLM 变得简单、可移植且干净。

您将获得内生的隐私保护——数据从不离开您的机器。您将获得可预测的成本——没有突如其来的 API 账单或限流。您还将获得对 AI 技术栈的完全掌控——不受厂商锁定,也不依赖互联网。

整个设置只需几分钟。

拉取镜像、运行容器、下载模型,您就可以开始构建。无论是在做 AI 助手原型、运行私有 RAG 管道,还是仅仅试验不同模型,这一组合都能在您的笔记本上提供企业级能力。

现在就试试吧。 选择适合您硬件的模型,启动 Ollama 容器,开始动手。门槛?几乎不存在。

下一步,我们建议您本地设置并运行DeepSeek R1(借助 Ollama)。

Ollama Docker 常见问题

使用 Docker Ollama 本地运行 LLM 是否一定需要高性能 GPU?

虽然可以在仅 CPU 的系统上运行 Ollama,但性能会较慢——简单回复大约需要 30 秒以上。使用现代 GPU,同样的查询可在 5 秒内完成。NVIDIA GPU 表现最佳,但 Apple Silicon Mac 也有不错表现,且性价比更高。真正的瓶颈通常是内存——小模型至少需要 8GB,70B 参数的大模型需要 64GB 以上。

可以将 Docker Ollama 集成到我现有的应用吗?

当然可以。Ollama 提供标准的 REST API,在 http://localhost:11434 监听,您可以用简单的 HTTP 请求集成到任何应用中。它与 Python、LangChain 等开发框架无缝协作。您可以构建聊天界面、代码补全工具或 RAG 管道,与本地 LLM 通信,而无需将数据发送到外部服务。

本地模型需要多少磁盘空间?

模型存储需求随规模显著变化——7B 参数模型需要 4–8GB,13B 模型需要 8–16GB,而 70B 模型可能占用 40–80GB 磁盘空间。多个模型版本与量化会迅速放大这些需求。若本地存储紧张,可将模型迁移到外接硬盘;Docker 卷也便于管理模型的存放位置。

如果运行 Docker 容器时忘记映射卷会怎样?

如果在运行容器时没有通过 -v ollama:/root/.ollama 正确映射卷,容器停止或重启后您会丢失所有已下载模型。这意味着每次都要重新下载数 GB 的模型,既浪费带宽又耗时。务必使用命名卷在容器会话间持久保存模型——这是新手最容易忽略的点之一。

Dario Radečić

作者

Dario Radečić

常驻克罗地亚的高级数据科学家。顶级科技写作者,已发表 700 多篇文章,累计获得超过 1,000 万次阅读。著有《使用 TPOT 实现机器学习自动化》。

主题