使用 Docker 运行 Ollama:安装及首个 模型
要在 Docker 中运行 Ollama,请启动官方 ollama/ollama 镜像,挂载用于存储模型的卷,并映射 11434 端口:docker run -d -v ollama:/root/.ollama -p 11434:11434 --name ollama ollama/ollama。如果配备 NVIDIA 显卡,请在安装 NVIDIA Container Toolkit 后添加 --gpus=all 参数。在 macOS 上,Docker Desktop 无法访问 GPU。如果 API 不应向网络开放,请将端口绑定到 127.0.0.1。
在容器中运行 Ollama,就是将其作为一个隔离的服务,启动、更新和删除都只需一条命令,无需改动系统。本指南从官方命令入手,逐步加入 NVIDIA GPU 支持、第一个模型和一个 Compose 文件,然后讲解教程通常遗漏的问题:谁真正能够访问端口 11434、应固定使用哪个版本,以及 GPU 为什么可能在运行过程中突然无法被识别。
#在 Docker 中运行 Ollama:究竟会带来哪些变化
官方镜像名为 ollama/ollama,可在 Docker Hub 上找到,下载量已超过 1 亿次。该镜像基于 Ubuntu 24.04,直接启动 Ollama 服务器:其中的变量 OLLAMA_HOST 值为 0.0.0.0:11434,因此 API 在容器内部监听 11434 端口。还需要做出四项决定:将该端口映射到主机,将一个卷挂载到 /root/.ollama 以保存模型,如果您有 NVIDIA 显卡,则通过 --gpus=all 授予容器访问 GPU 的权限,以及选择镜像版本。容器启动时不包含任何模型:之后需要在容器内执行 ollama 命令下载模型。这四项决定在 Compose 文件中也完全相同。
这样可以获得一个隔离的安装环境,无需系统服务,用单个文件即可描述,也容易与其他容器(网页界面、向量数据库、n8n)共存。代价是需要配置 GPU 访问、在 macOS 下无法访问 GPU,以及必须控制网络端口的暴露范围;最后这一点是大多数教程都会遗漏的。
#根据您的硬件选择相应命令
只需 1 小时,即可在您的电脑上拥有专属的免费 ChatGPT — LM Studio、Ollama、Open WebUI、您的文档,无需云端。
- 在线空间,终身可用
- PDF + 文件
- 终身更新
一个容器镜像即可覆盖所有情况;只有启动选项会随 GPU 而变化。下表依据 Ollama 文档整理,并列出最容易让人踩坑的限制条件。
| 机器 | 镜像与选项 | 主机端需准备的内容 | 需了解的限制 |
|---|---|---|---|
| 无 GPU | ollama/ollama,无选项 | 仅使用Docker | 这种方式仅用于小模型 |
| NVIDIA, Linux | ollama/ollama 使用 --gpus=all | 驱动版本 550 或更高版本,NVIDIA Container Toolkit | 计算能力为5.0至6.2的显卡:最低需驱动570版本 |
| NVIDIA,Windows | 相同命令,Docker Desktop | WSL2 后端、兼容 WSL2 的驱动程序、保持最新的 WSL2 内核 | 没有WSL2就无法访问GPU |
| AMD Radeon,Linux | ollama/ollama:rocm --device /dev/kfd --device /dev/dri | AMD ROCm v7 驱动 | 未列出的显卡:尝试使用 HSA_OVERRIDE_GFX_VERSION |
| 其他GPU(Vulkan) | ollama/ollama 通过 --device /dev/kfd --device /dev/dri 启动 | 无:Vulkan 已包含在镜像中 | 可通过设置 OLLAMA_VULKAN=0 禁用 |
| NVIDIA Jetson | --gpus=all 且 JETSON_JETPACK=5 或 6 | JetPack 5 或 6 | Ollama 无法推断版本 |
| Mac(Docker Desktop) | ollama/ollama,仅使用处理器 | 无 | 不支持GPU直通:建议使用原生安装 |
#先决条件
- Docker
- Linux 上的 Docker Engine,Windows 或 macOS 上的 Docker Desktop,配合 docker compose 命令用于第 5 节。
- 内存
- 模型占用的内存,加上上下文占用,再为系统留出余量。qwen3.5:9b 的大小为 6.6 GB:使用 CPU 运行时,应以 16 GB 内存为目标,而不是 8 GB。
- 磁盘
- 为镜像和一两个模型预留 20 GB 可用磁盘空间。
- NVIDIA GPU,可选
- 驱动程序应安装在宿主机上,绝不要安装在容器内;NVIDIA Container Toolkit 负责在两者之间搭建桥梁。
#五步流程
- 01安装 DockerLinux 上使用 Docker Engine,Windows 或 macOS 上使用 Docker Desktop。命令 docker version 必须在客户端和引擎端均返回结果。
- 02准备 NVIDIA GPU(可选)安装 NVIDIA Container Toolkit,执行 nvidia-ctk runtime configure --runtime=docker,重启 Docker,然后使用 docker run --rm --gpus all ubuntu nvidia-smi 进行测试。
- 03启动容器docker run avec -d, --name ollama, -v ollama:/root/.ollama, -p 127.0.0.1:11434:11434 et, avec NVIDIA, --gpus=all.
- 04下载模型docker exec -it ollama ollama pull, suivi de qwen3.5:4b pour une carte de 8 Go, ou de qwen3.5:9b avec plus de marge.
- 05检查docker exec ollama ollama ps doit afficher 100% GPU dans la colonne PROCESSOR.
#1. docker run 命令
Ollama 文档给出的纯 CPU 运行命令是:docker run -d -v ollama:/root/.ollama -p 11434:11434 --name ollama ollama/ollama。下面的版本将端口开放范围限制为本机,下一节会解释这样做的原因,并添加了自动重启功能。
- -p 127.0.0.1:11434:11434
- 将容器的 11434 端口映射到主机端口,仅限主机自身使用。
- -v ollama:/root/.ollama
- 命名卷挂载在 Ollama 存放模型的位置。该卷在容器被删除后仍可保留。
- --restart unless-stopped
- 在 Docker 或机器重启后自动重新启动容器,除非容器已被手动停止。
响应是一个包含版本号的 JSON 对象,例如 {"version":"0.34.4"},这是截至 2026 年 9 月 29 日的稳定版本。
#端口 11434:谁真正能够访问
原生安装时,Ollama 默认监听 127.0.0.1:只有本机能与它通信。而在容器中,镜像将 OLLAMA_HOST 设置为 0.0.0.0:11434,否则从容器外部无法访问该端口。因此,安全防护取决于您如何发布端口。
根据Docker文档,默认情况下发布容器端口存在安全隐患:它会对外部世界开放,而不仅限于主机。使用 -p 11434:11434 命令会将其绑定到机器的所有地址。然而,Ollama 的本地API无需认证:任何访问该端口的用户均可查看您的模型列表、下载模型或占用您的GPU。
- -p 11434:11434
- 主机所有接口:可从局域网访问,甚至可从互联网访问。
- -p 127.0.0.1:11434:11434
- 仅允许本机访问。这是本指南的默认选择。
- -p 192.168.1.10:11434:11434
- 仅一个主机地址;请替换为您的地址。
如果您有意让网络中的其他设备访问 Ollama,请在它前面部署一个带身份验证的反向代理,具体方法见页面末尾引用的安全加固指南。
#更改主机端端口
如果已有另一个实例在运行,端口 11434 就会被占用,这个实例通常是原生应用。不要改动容器端的设置:只修改左侧的端口号即可。使用 -p 127.0.0.1:11435:11434 时,您的机器通过端口 11435 与 Ollama 通信;容器内部则保持不变。
#从另一个容器中连接Ollama
同一个 Compose 文件中的两个服务共享一个网络,彼此可以通过服务名访问。因此,Open WebUI 使用 http://ollama:11434,无需向外发布端口。如果 Ollama 改为在宿主机上运行,Open WebUI 的文档指出了一个容易踩到的坑:Ollama 监听的是 127.0.0.1,因此容器内无法访问。需要通过 host.docker.internal 访问它,并让它在其他地址上监听。
#2. 启用 NVIDIA GPU
Docker 默认无法识别您的 GPU。需要在主机上安装更新到当前版本的 NVIDIA 驱动程序和 NVIDIA Container Toolkit,然后使用 --gpus 参数。Ollama 要求驱动程序版本为 550 或更高;对于计算能力为 5.0 至 6.2 的旧款显卡,则要求版本 570。容器使用主机的驱动程序,本身不包含驱动程序。
nvidia-ctk 命令会修改 /etc/docker/daemon.json 文件,让 Docker 识别 NVIDIA 运行时,因此需要重启。对于 Fedora 或 RHEL,Ollama 文档提供了使用 yum 或 dnf 的对应命令。在操作 Ollama 之前,请先用一个用完即可删除的容器排查问题:如果该容器测试失败,Ollama 也无法识别您的 GPU。
随后重新启动 Ollama,并赋予其 GPU 访问权限。数据卷会保留:已下载的模型仍然在其中。
在 Linux 下使用 Radeon 显卡时,rocm 标签以及 /dev/kfd 和 /dev/dri 设备取代 --gpus;仍需在宿主机上安装 ROCm v7 驱动程序。
#3. 首个模型
容器正在运行,但里面还没有模型。ollama 命令位于容器内,通过 docker exec 调用。本指南使用 qwen3.5:9b;Ollama 模型库将其描述为大小 6.6 GB、上下文窗口 256K,并支持文本和图像。
即使还未计入上下文所需的空间,内存也必须容纳这 6.6 GB。在一张 8 GB 显存的显卡上,余量很小:选择 4B 版本更稳妥。
| Tag | 磁盘占用 | 选择依据 |
|---|---|---|
| qwen3.5:4b | 3.4 GB | 8GB显存,预留上下文空间 |
| qwen3.5:9b | 6.6 GB | 显存为 12 GB 或以上的显卡,或使用 CPU 运行时配备 16 GB 内存 |
| qwen3.5:27b | 17 GB | 24 GB 显存的显卡,适中的上下文长度 |
| qwen3.5:35b | 24 GB | 计入上下文后,24 GB 显存的单张显卡装不下:部分数据会转移到系统 RAM。 |
最后一列的参考值是数量级,而非具体单位:实际位置取决于上下文和量化方式。要与模型交互,请启动 ollama run dans 容器。
通常通过 HTTP API 使用:任何客户端都可以像与原生安装的 Ollama 通信一样与容器通信,文档也明确说明,该 API 支持 OpenAI 格式的一个子集。
在PROCESSOR列中,100% GPU表示模型完全位于显存中,100% CPU表示模型位于系统内存中,48%/52% CPU/GPU表示模型在两者之间分配。这种分配会显著降低生成速度:相比超出显存的模型,更推荐使用较小的模型。
#在容器层面设置上下文
默认上下文窗口取决于内存:显存低于 24 GiB 时为 4k,24 至 48 GiB 之间为 32k,超过 48 GiB 则为 256k。文档建议代理和代码工具至少使用 64 000 个 token。更大的上下文会消耗更多内存:在 docker run 中传入 -e OLLAMA_CONTEXT_LENGTH=8192,然后检查 ollama ps 中的 CONTEXT 列。
#4. 持久化数据卷:模型存放在哪里
-v ollama:/root/.ollama 创建了一个名为 ollama 的 Docker 卷,与容器独立。Docker 文档已证实:卷在容器删除后仍会保留,从而允许在不重新下载模型的情况下替换镜像。执行 docker volume inspect ollama 可查看其 Mountpoint,即主机上的文件位置
在 Linux 系统上,原生安装会将模型文件存放在 /usr/share/ollama/.ollama/models 目录中。该目录与 Docker 卷没有任何关联:从一侧下载的模型不会出现在另一侧。
#5. Docker Compose:同样的内容,放在一个文件中
以下文件与前述命令实现相同的功能,内容一目了然,并可用 git 进行版本管理。它会固定镜像版本:请将 0.34.4 替换为您阅读时最新的稳定版本。
deploy 配置块用于预留 GPU;根据 Compose 文档,capabilities 字段是必填项,否则部署会失败。如果没有 NVIDIA GPU,请删除整个配置块:其余部分可在 CPU 上运行。
#更新 Ollama,保留现有模型
截至 2026 年 9 月 29 日,GitHub 上的 Ollama 版本页面将 0.34.4 标为最新稳定版,而 0.35.0 列为预发布版。不过,Docker Hub 上已经存在 0.35.0 标签,与一些 rc 标签并列;rc 表示候选发布版。因此,请固定使用一个稳定版本号,而不是追随最新发布的标签:何时更新,由您决定。
使用 Compose 时,修改文件中的版本号,然后运行 docker compose pull 和 docker compose up -d。使用 docker run 时,拉取新镜像,删除旧容器,再次运行相同的命令:只要使用的是同一个卷,原有模型就会保留下来。最后运行 curl http://localhost:11434/api/version 检查版本。
#Docker 或原生安装:选择其一
两种方法均使用相同服务器和相同端口。该表格依据Ollama的文档编制;未对速度进行比较,因缺乏可公开引用的测量数据。
| 标准 | Docker 中的 Ollama | Ollama 原生安装 |
|---|---|---|
| 更新 | 更换标签后执行 docker compose pull | macOS 和 Windows 上自动完成;Linux 上需重新执行安装脚本 |
| 模型 | Docker卷或挂载目录 | /usr/share/ollama/.ollama/models sous Linux |
| 日志 | docker logs ollama | 在 Linux 系统中使用 systemd 时,执行 journalctl -u ollama |
| 网络暴露 | 选择 -p 参数(127.0.0.1 或所有地址) | 默认为127.0.0.1,可通过OLLAMA_HOST修改 |
| Mac 上的 GPU | 无访问权限 | 直接安装到设备上 |
如果需要部署多个服务、锁定版本或多人共用一台电脑,请选择 Docker。在 Mac 上,或者 Docker 对个人使用没有帮助时,请选择原生安装。
#故障排除
- could not select device driver "nvidia"
- 缺少 NVIDIA Container Toolkit,或者在运行 nvidia-ctk runtime configure 后没有重启 Docker。请重新配置,重启 Docker,再用 docker run --rm --gpus all ubuntu nvidia-smi 重新测试。
- GPU正常运行,随后 Ollama 切换至处理器运行
- 已记录症状:日志显示在一段时间后出现GPU发现失败的问题。Ollama 建议在Docker中禁用systemd的cgroup管理:在 /etc/docker/daemon.json 中添加 "exec-opts": ["native.cgroupdriver=cgroupfs"],然后重启Docker。
- GPU错误代码3、46、100或999
- 通过执行 sudo rmmod nvidia_uvm 然后 sudo modprobe nvidia_uvm 重新加载 UVM 驱动,或重启机器。
- 端口11434已被占用
- 另一个实例正在监听,通常为原生应用。请停止该实例,或使用 -p 127.0.0.1:11435:11434 在其他端口发布服务。
- 截断的回复
- 默认上下文长度取决于VRAM。启动时可通过添加 -e OLLAMA_CONTEXT_LENGTH=8192 来设置,同时需监控内存使用情况。
- 使用网络代理时下载受阻
- 在容器中添加 -e HTTPS_PROXY=https://proxy.example.com。文档建议避免使用 HTTP_PROXY,因为它可能干扰客户端。
- 无法通过局域网访问
- 使用 -p 127.0.0.1:11434:11434 时,这是正常现象。只有在端口访问受到身份验证保护时,才开放端口。
#常见问题
Ollama 的官方 Docker 镜像是什么?+
Ollama 是否可以在 Windows 或 Mac 上的 Docker 中使用 GPU?+
如何在Docker中更新Ollama而不丢失模型?+
如何使用 Docker Compose 将 Open WebUI 连接到 Ollama?+
容器中的 Ollama API 是否有密码保护?+
#深入了解
您现在已有一个正常运行、处于隔离环境中的 Ollama,模型运行在 GPU 上。接下来顺理成章的步骤是:配置聊天界面,在任何网络共享之前做好安全加固,然后搭建生产环境的软件栈。
- 来源:Ollama 文档中的 Docker 页面
- 来源:Docker Hub 上 ollama/ollama 镜像
- 来源:Docker,端口发布信息
- 来源:NVIDIA Container Toolkit,安装指南
- 来源:Ollama文档,支持的GPU列表
有反馈、发现了错误,或想补充说明?请告诉我们,让这份指南对每个人都更有帮助。