入门 14 分钟Docker

使用 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 为什么可能在运行过程中突然无法被识别。

作者: Mohamed Meguedmi·更新于 2026-09-29·已在 Windows、macOS 和 Linux 上测试

#在 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,以及必须控制网络端口的暴露范围;最后这一点是大多数教程都会遗漏的。

#根据您的硬件选择相应命令

本地 AI 套件

只需 1 小时,即可在您的电脑上拥有专属的免费 ChatGPT — LM Studio、Ollama、Open WebUI、您的文档,无需云端。

  • 在线空间,终身可用
  • PDF + 文件
  • 终身更新

一个容器镜像即可覆盖所有情况;只有启动选项会随 GPU 而变化。下表依据 Ollama 文档整理,并列出最容易让人踩坑的限制条件。

不同机器对应的 docker run 选项(Ollama 文档,2026 年 9 月)
机器镜像与选项主机端需准备的内容需了解的限制
无 GPUollama/ollama,无选项仅使用Docker这种方式仅用于小模型
NVIDIA, Linuxollama/ollama 使用 --gpus=all驱动版本 550 或更高版本,NVIDIA Container Toolkit计算能力为5.0至6.2的显卡:最低需驱动570版本
NVIDIA,Windows相同命令,Docker DesktopWSL2 后端、兼容 WSL2 的驱动程序、保持最新的 WSL2 内核没有WSL2就无法访问GPU
AMD Radeon,Linuxollama/ollama:rocm --device /dev/kfd --device /dev/driAMD 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 或 6JetPack 5 或 6Ollama 无法推断版本
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 负责在两者之间搭建桥梁。

#五步流程

  1. 01
    安装 Docker
    Linux 上使用 Docker Engine,Windows 或 macOS 上使用 Docker Desktop。命令 docker version 必须在客户端和引擎端均返回结果。
  2. 02
    准备 NVIDIA GPU(可选)
    安装 NVIDIA Container Toolkit,执行 nvidia-ctk runtime configure --runtime=docker,重启 Docker,然后使用 docker run --rm --gpus all ubuntu nvidia-smi 进行测试。
  3. 03
    启动容器
    docker run avec -d, --name ollama, -v ollama:/root/.ollama, -p 127.0.0.1:11434:11434 et, avec NVIDIA, --gpus=all.
  4. 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.
  5. 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。下面的版本将端口开放范围限制为本机,下一节会解释这样做的原因,并添加了自动重启功能。

Ollama Docker,CPU 版本
docker run -d \
  --name ollama \
  -p 127.0.0.1:11434:11434 \
  -v ollama:/root/.ollama \
  --restart unless-stopped \
  ollama/ollama
-p 127.0.0.1:11434:11434
将容器的 11434 端口映射到主机端口,仅限主机自身使用。
-v ollama:/root/.ollama
命名卷挂载在 Ollama 存放模型的位置。该卷在容器被删除后仍可保留。
--restart unless-stopped
在 Docker 或机器重启后自动重新启动容器,除非容器已被手动停止。
验证
docker ps --filter name=ollama
curl http://localhost:11434/api/version

响应是一个包含版本号的 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。

!
在Ubuntu系统中,ufw在此场景下无法提供有效防护
Docker 会在发往已发布端口的流量到达 ufw 规则之前将其转走。因此,拒绝访问 11434 端口的规则会被忽略;Docker 文档将这种情况称为绕过防火墙配置。将端口发布到 127.0.0.1 是最简单的应对方法。
-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 Container Toolkit (Ubuntu, Debian)
curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey \
  | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg
curl -fsSL 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

nvidia-ctk 命令会修改 /etc/docker/daemon.json 文件,让 Docker 识别 NVIDIA 运行时,因此需要重启。对于 Fedora 或 RHEL,Ollama 文档提供了使用 yum 或 dnf 的对应命令。在操作 Ollama 之前,请先用一个用完即可删除的容器排查问题:如果该容器测试失败,Ollama 也无法识别您的 GPU。

GPU 直通测试
docker run --rm --gpus all ubuntu nvidia-smi

随后重新启动 Ollama,并赋予其 GPU 访问权限。数据卷会保留:已下载的模型仍然在其中。

Ollama Docker,NVIDIA GPU 版
docker rm -f ollama

docker run -d \
  --name ollama \
  --gpus=all \
  -p 127.0.0.1:11434:11434 \
  -v ollama:/root/.ollama \
  --restart unless-stopped \
  ollama/ollama
!
Windows:必须使用WSL2后端
根据Docker文档,Docker Desktop中仅在Windows系统下通过WSL2后端才能访问GPU。需要安装支持WSL2的NVIDIA驱动程序,使用更新的Windows系统以及通过wsl --update获取的最新WSL2内核。与在Windows下安装的Ollama进行对比,请参考WSL2或原生模式指南。

在 Linux 下使用 Radeon 显卡时,rocm 标签以及 /dev/kfd 和 /dev/dri 设备取代 --gpus;仍需在宿主机上安装 ROCm v7 驱动程序。

Ollama Docker,AMD GPU(ROCm)
docker run -d \
  --device /dev/kfd --device /dev/dri \
  -v ollama:/root/.ollama \
  -p 127.0.0.1:11434:11434 \
  --name ollama \
  ollama/ollama:rocm

#3. 首个模型

容器正在运行,但里面还没有模型。ollama 命令位于容器内,通过 docker exec 调用。本指南使用 qwen3.5:9b;Ollama 模型库将其描述为大小 6.6 GB、上下文窗口 256K,并支持文本和图像。

下载模型
docker exec -it ollama ollama pull qwen3.5:9b

即使还未计入上下文所需的空间,内存也必须容纳这 6.6 GB。在一张 8 GB 显存的显卡上,余量很小:选择 4B 版本更稳妥。

Ollama 模型库中 qwen3.5 各变体的文件大小(2026年9月)
Tag磁盘占用选择依据
qwen3.5:4b3.4 GB8GB显存,预留上下文空间
qwen3.5:9b6.6 GB显存为 12 GB 或以上的显卡,或使用 CPU 运行时配备 16 GB 内存
qwen3.5:27b17 GB24 GB 显存的显卡,适中的上下文长度
qwen3.5:35b24 GB计入上下文后,24 GB 显存的单张显卡装不下:部分数据会转移到系统 RAM。

最后一列的参考值是数量级,而非具体单位:实际位置取决于上下文和量化方式。要与模型交互,请启动 ollama run dans 容器。

对话
docker exec -it ollama ollama run qwen3.5:9b

通常通过 HTTP API 使用:任何客户端都可以像与原生安装的 Ollama 通信一样与容器通信,文档也明确说明,该 API 支持 OpenAI 格式的一个子集。

从主机调用 API
curl http://localhost:11434/api/generate -d '{
  "model": "qwen3.5:9b",
  "prompt": "Explique la quantification Q4 en deux phrases.",
  "stream": false
}'
模型是否在GPU上运行?
docker exec ollama ollama ps

在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 卷没有任何关联:从一侧下载的模型不会出现在另一侧。

→
将模型存储在其他磁盘上
将命名的卷替换为宿主机目录:-v /mnt/ssd/ollama:/root/.ollama。文件可直接读取,但目录权限需自行管理。
备份数据卷
docker run --rm \
  -v ollama:/data \
  -v $(pwd):/backup \
  alpine tar czf /backup/ollama-models.tar.gz -C /data .

#5. Docker Compose:同样的内容,放在一个文件中

以下文件与前述命令实现相同的功能,内容一目了然,并可用 git 进行版本管理。它会固定镜像版本:请将 0.34.4 替换为您阅读时最新的稳定版本。

compose.yaml
services:
  ollama:
    image: ollama/ollama:0.34.4
    container_name: ollama
    ports:
      - "127.0.0.1:11434:11434"
    volumes:
      - ollama:/root/.ollama
    restart: unless-stopped
    deploy:
      resources:
        reservations:
          devices:
            - driver: nvidia
              count: all
              capabilities: [gpu]

volumes:
  ollama:

deploy 配置块用于预留 GPU;根据 Compose 文档,capabilities 字段是必填项,否则部署会失败。如果没有 NVIDIA GPU,请删除整个配置块:其余部分可在 CPU 上运行。

生命周期
docker compose up -d        # démarrer
docker compose logs -f      # suivre les logs
docker compose pull         # télécharger l'image du tag indiqué
docker compose down         # arrêter, volume conservé
docker compose down -v      # arrêter et supprimer le volume : efface tous les modèles
i
注意-v选项
根据Docker文档,docker compose down -v 会删除文件中声明的命名卷。其中包含ollama卷:您的模型将丢失。

#更新 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与原生安装:逐项对比
标准Docker 中的 OllamaOllama 原生安装
更新更换标签后执行 docker compose pullmacOS 和 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 时,这是正常现象。只有在端口访问受到身份验证保护时,才开放端口。

#常见问题

FAQ
Ollama 的官方 Docker 镜像是什么?+
这是在 Docker Hub 上由 Ollama 发布的 ollama/ollama。latest 标签表示当前版本,数字标签如 0.34.4 表示固定版本,-rocm 后缀则选择适用于 AMD GPU 的镜像。为实现稳定运行,建议锁定一个稳定的数字版本标签而非 latest,以确保更新仅在您决定时发生。
Ollama 是否可以在 Windows 或 Mac 上的 Docker 中使用 GPU?+
在 Windows 上,NVIDIA 显卡可以使用 GPU,前提是 Docker Desktop 使用 WSL2 后端,安装了兼容 WSL2 的 NVIDIA 驱动,并且 WSL2 内核已更新(wsl --update)。在 macOS 上则不行:Docker Desktop 不提供 GPU 直通或模拟,因此容器使用 CPU 运行。要利用 Apple 芯片,请直接在机器上安装 Ollama。
如何在Docker中更新Ollama而不丢失模型?+
模型存储在卷中,而不是容器中。使用 Compose 时,修改镜像标签,然后执行 docker compose pull 和 docker compose up -d。使用 docker run 时,执行 docker pull、docker rm -f ollama,再使用相同的卷重新执行原来的命令。避免使用 docker compose down -v,因为它也会删除文件中定义的命名卷。
如何使用 Docker Compose 将 Open WebUI 连接到 Ollama?+
将两个服务放在同一个 Compose 文件中:它们共享一个网络,可以通过各自的服务名互相连接。在 Open WebUI 中,将变量 OLLAMA_BASE_URL 设置为 http://ollama:11434。如果 Ollama 运行在宿主机上,则通过 host.docker.internal 连接,并确认它并非只监听 127.0.0.1。Open WebUI 指南详细说明了配置方法。
容器中的 Ollama API 是否有密码保护?+
不。Ollama的文档明确指出,本地API无需认证。使用-p 11434:11434时,Docker会将端口暴露到主机的所有网络接口,且ufw防火墙不会对其进行过滤。请将服务发布在127.0.0.1,或通过带认证的反向代理(如安全指南中所述)进行访问。

#深入了解

您现在已有一个正常运行、处于隔离环境中的 Ollama,模型运行在 GPU 上。接下来顺理成章的步骤是:配置聊天界面,在任何网络共享之前做好安全加固,然后搭建生产环境的软件栈。

这份指南对您有帮助吗?

有反馈、发现了错误,或想补充说明?请告诉我们,让这份指南对每个人都更有帮助。