Windows WSL2 Docker 本地大模型部署:在容器里用 NVIDIA 显卡跑 Ollama - Windows WSL2 Docker 本地大模型

Windows WSL2 Docker 本地大模型部署:在容器里用 NVIDIA 显卡跑 Ollama

很多本地 AI 教程默认你用 Linux,可大多数游戏本和工作站装的是 Windows。其实不必为此装双系统:Windows 子系统 WSL 2 能提供真正的 Linux 环境,Docker Desktop 还能把 NVIDIA 显卡交给容器使用。这篇讲 Windows WSL2 Docker 本地大模型 的搭法:什么情况下值得多加这一层,显卡是怎么共享的,要敲哪些命令,怎样避开内存和磁盘的坑,以及如何在 Windows 里访问容器里的模型。如果你只是想在一台电脑上和模型聊天,Ollama 安装教程里的原生安装更简单。

核对说明:安装条件来自微软的 WSL 安装页和 .wslconfig 文档、NVIDIA 的 CUDA on WSL 用户指南、Docker 的 Windows GPU 支持页面以及 Ollama 的 Docker 文档,均在 2026-10-30 读取。本文没有在测试机上完整跑通整个流程,请以链接页面上的最新命令和版本为准。

要点速览(更新于 2026-10-30)

  • 只需要在 Windows 上安装 NVIDIA 驱动。NVIDIA 说明这是唯一需要的驱动,并明确提醒不要在 WSL 里安装 Linux 显卡驱动。
  • Docker Desktop 只在 WSL 2 后端下支持 --gpus;Ollama 文档给出的容器命令是 docker run -d --gpus=all -v ollama:/root/.ollama -p 11434:11434 --name ollama ollama/ollama。

  • WSL 2 虚拟机默认最多使用 Windows 内存的 50%,所以 32GB 内存的电脑默认只给 WSL 16GB,需要时在 .wslconfig 里调高。

Windows WSL2 Docker 本地大模型:什么时候值得用

直接在 Windows 上跑模型是最短的路径。WSL 2 加 Docker 多了一层,所以应当有理由才用。第一个理由是和服务器保持一致:如果最终部署在装了 Docker Compose 的 Linux 机器上,用同样的方式开发能少踩很多坑。第二个理由是有些软件只能在 Linux 里跑,比如某些推理引擎和知识库平台,我们的 Dify 与 RAGFlow 教程和 vLLM 入门都默认你有 Linux 环境。第三个理由是隔离:容器把依赖和 Windows 本体分开,删除起来也干净。

代价同样真实:WSL 2 虚拟机会占用内存,Linux 发行版的磁盘会在 Windows 盘上不断变大,排错时还多出两个地方要查。如果上面三个理由你都不沾,就用原生版。

从 Windows 的 NVIDIA 驱动经 WSL 2 和 Docker 到 Ollama 容器和 Open WebUI 的显卡路径示意图
图 1:显卡经 WSL 2 和 Docker 的路径

第一步:Windows 驱动和 WSL 2

微软的安装页说明,WSL 需要 Windows 10 2004 版(build 19041)或更新版本,或者 Windows 11,一条命令即可装好,默认发行版是 Ubuntu。用管理员身份打开 PowerShell,运行:

wsl --install
wsl --update

按提示重启,然后完成 Linux 发行版的首次启动,创建一个用户。第二条命令用来获取最新的 WSL 内核,Docker 的 GPU 页面把它列为前提条件。

显卡方面,NVIDIA 的 CUDA on WSL 指南要求从官网安装最新的 NVIDIA Windows 驱动,称它是唯一需要安装的驱动,并明确写着不要在 WSL 里安装任何 Linux 显卡驱动。这是最常见的错误:有人在 Ubuntu 里又装了一遍 Linux 驱动,结果把直通弄坏了。装好后打开 Ubuntu 终端运行 nvidia-smi,应该能看到你的显卡。指南还提到,WSL 下的 nvidia-smi 功能有限,部分字段可能缺失,这是正常的。

第二步:用 WSL 2 后端的 Docker Desktop

安装 Docker Desktop,并在设置里确认启用了 WSL 2 后端。Docker 的 GPU 页面说明,用 --gpus 把显卡交给 Linux 容器的功能,只在 Windows 的 WSL 2 后端下可用,并列出前提条件:带 NVIDIA 显卡的 Windows 电脑、保持更新的 Windows 10 或 11、支持 WSL 2 GPU 半虚拟化的最新 NVIDIA 驱动,以及最新的 WSL 2 内核。Ollama 的页面写了安装 NVIDIA Container Toolkit 的步骤,但那些步骤面向装了 Docker Engine 的 Linux 主机;在 Windows 的 Docker Desktop 上,请以 Docker 自己的 GPU 页面为准。

第三步:在容器里运行 Ollama

Ollama 文档给出的命令如下。仅用 CPU 的版本是 docker run -d -v ollama:/root/.ollama -p 11434:11434 --name ollama ollama/ollama。使用 NVIDIA 显卡时加上 --gpus=all:

docker run -d --gpus=all -v ollama:/root/.ollama -p 11434:11434 --name ollama ollama/ollama
docker exec -it ollama ollama run qwen2.5:14b
docker exec -it ollama ollama ps

命名卷会在你重建容器时保留已下载的模型。最后一条命令能告诉你模型是否跑在显卡上;如果 Processor 一栏不是 100% GPU,就要检查驱动、后端和内存,并参考我们的 GPU 故障排查指南。微软的 .wslconfig 文档把 localhostForwarding 的默认值列为 true,也就是 WSL 2 虚拟机里绑定的端口可以从 Windows 通过 localhost 访问,所以 Windows 里的浏览器或应用可以直接用 http://localhost:11434。

步骤 在哪里做 命令或操作 检查方法
驱动 Windows 安装最新的 NVIDIA 驱动 WSL 里 nvidia-smi 能运行
WSL PowerShell wsl –install、wsl –update Ubuntu 能启动
Docker Docker Desktop 启用 WSL 2 后端 容器能启动
模型服务 WSL 或 Docker docker run 加 –gpus=all ollama ps 显示 GPU
界面 Windows 浏览器 Open WebUI 或你的应用 对话有响应
16、32、64、128GB 内存的 Windows 电脑上 WSL 2 默认内存上限柱状图
图 2:WSL 2 虚拟机默认可用 Windows 内存的一半

内存、磁盘和性能的坑

.wslconfig 文件放在你的 Windows 用户目录下,用来控制 WSL 2 虚拟机。微软文档写明:memory 默认是 Windows 总内存的 50%,processors 默认是全部逻辑处理器,swap 默认是内存的 25%(向上取整到 GB)。因此 32GB 内存的电脑,WSL 2 默认只有 16GB。完全跑在显卡上的模型占用的系统内存不多,但加载、卸载到内存和容器本身都要用一些。如果你要把一部分层放到系统内存,参见内存与显存卸载,那就需要调高上限,同时要给 Windows 本身留足空间。32GB 的机器可以先试 24GB。改完文件后运行 wsl --shutdown,等几秒再启动,因为微软说明配置变更需要虚拟机完全停止后才生效。

磁盘是第二个坑。发行版和 Docker 卷都存放在你 Windows 盘上的虚拟磁盘里,几个大模型很快就是几十 GB,请留意那块盘的剩余空间。模型文件请放在 Linux 文件系统或 Docker 卷里,不要放在挂载进 Linux 的 Windows 文件夹中,那样会更慢。如何迁移模型存放位置,见模型路径教程。

加上网页界面和 API

Ollama 跑起来之后,可以按 Open WebUI 教程再加一个容器作为网页界面。同一个 Docker 网络里的容器可以用名称互相访问,所以要让界面指向 Ollama 容器的名称,而不是 localhost,因为容器里的 localhost 指的是容器自己。需要 OpenAI 风格接口的应用,可以看本地 API 服务教程。请让服务只对你自己的电脑或可信网络开放,不要把 11434 端口发布到公网。

用 Docker Compose 管理 Ollama 和 Open WebUI

单条命令跑通之后,用 Compose 文件把整套服务放在一起更好维护。下面的草稿参考了 Ollama 和 Open WebUI 文档里的写法:Ollama 获得显卡,Open WebUI 通过服务名访问它。

services:
  ollama:
    image: ollama/ollama
    volumes:
      - ollama:/root/.ollama
    deploy:
      resources:
        reservations:
          devices:
            - driver: nvidia
              count: all
              capabilities: [gpu]
  webui:
    image: ghcr.io/open-webui/open-webui:main
    environment:
      - OLLAMA_BASE_URL=http://ollama:11434
    ports:
      - "3000:8080"
    depends_on: [ollama]
volumes:
  ollama:

注意这里没有发布 Ollama 的端口,所以从 Windows 只能访问网页界面,地址是 http://localhost:3000。使用前请查看 Open WebUI 当前文档里的镜像标签和设置,因为这两个项目更新很快;并且在局域网内其他人使用之前,一定要先开启登录认证。

排错清单

如果模型明明该用显卡却在跑 CPU,请按层次逐一排查。第一,先在 Windows 里运行 nvidia-smi,再在 WSL 终端里运行;如果在 WSL 里失败,问题出在驱动或 WSL 内核,两者都更新一遍。第二,确认 Docker Desktop 使用的是 WSL 2 后端,并且容器是带 --gpus=all 启动的。第三,运行 docker exec -it ollama ollama ps,看 Processor 一栏。第四,用 docker logs ollama 查看容器日志里有没有关于显卡识别的信息。第五,检查显存:模型放不进显存就会溢出到 CPU,现象和直通失败一模一样,所以先换一个更小的模型试试,再怀疑环境。

如果 Windows 里的应用访问不到模型,检查容器是否发布了端口,Windows 防火墙或安全软件有没有拦截,以及 .wslconfig 里是否关闭了 localhost 转发。如果磁盘空间莫名减少,去看 Docker 卷和没用的镜像,并用 ollama rm 删掉不再使用的模型。

选一个放得进你显卡的模型

容器不会改变显存能放下什么。需要的内存超过显卡容量的模型会溢出到系统内存而变慢,不管有没有 Docker。按我们显存指南里的经验值,Q4_K_M 量化的模型大约每 10 亿参数需要 0.61GB,所以 14B 模型在算上上下文缓存之前约 8.6GB,8GB 显卡更适合小一点的模型,详见 8GB 显存指南。这些都是推算的估计值,不是实测,上下文长度还会再增加占用。先选一个明显小于显存的模型,确认 ollama ps 里显示 100% GPU,再去尝试更大的。

第一天的测试计划

不要一次把所有东西都装上。第一天,先让 WSL 里的 nvidia-smi 正常。然后用仅 CPU 的容器和一个很小的模型,验证网络和存储卷没问题。接着用 --gpus=all 重建容器,并在 ollama ps 里确认显卡生效。这些都通过后再加网页界面。每一步都记下改了什么,出问题时才知道该怪哪一层。如果打算长期给其他人提供服务,请在开放任何端口之前先读我们的远程服务指南,一旦服务变得重要,就考虑换到专用机器上。

让这套环境保持健康

更新要按合理的顺序:先更新 Windows 上的 NVIDIA 驱动,运行 wsl --update,再更新 Docker Desktop,最后用 docker pull ollama/ollama 拉取新镜像。更新后重启容器,再看一次 ollama ps,因为驱动变动是原本正常的环境退回到 CPU 的最常见原因。只有在你下载很慢的时候才需要备份存放模型的 Docker 卷,否则重新拉取就行。最后要记住,Windows 可能因更新而重启,这会让 WSL 2 虚拟机和容器停止;如果希望服务自己恢复,请设置容器的重启策略,同时接受这也正是常开服务更适合专用机器的原因。

原生还是 WSL 2

五种情况下应选原生 Windows、WSL 2 还是专用 Linux 机器的对照表
图 3:原生 Windows 还是 WSL 2
问题 原生 Windows WSL 2 加 Docker
安装难度 最低 中等
显卡访问 直接 通过 Windows 驱动
仅 Linux 可用的工具 用不了 可用
内存开销 无 一个有独立上限的虚拟机
与 Linux 服务器一致 部分一致 高度一致

常见错误

  • 在 WSL 里安装 Linux 版 NVIDIA 驱动。 只装 Windows 驱动。
  • 忘了运行 wsl –update。 旧内核可能让显卡无法使用。
  • 一直用默认内存上限。 Windows 内存的一半可能太少,也可能太多。
  • 让容器去访问 localhost。 应当使用容器名或主机地址。
  • 把 Ollama 端口发布到公网。 请只放在可信网络里。
  • 把模型放在挂载的 Windows 文件夹里。 比放在 Linux 文件系统里更慢。

常见问题

在 WSL 里跑 Ollama 需要安装 CUDA 吗?

不需要。NVIDIA 说明 Windows 驱动是唯一需要的驱动,Ollama 会自带它需要的部分。CUDA 工具包只在你要编译 CUDA 程序时才需要。

WSL 2 比原生 Windows 慢吗?

我们没有做过对比测试。它多了一层并且有内存上限,如果速度对你很重要,请用自己的模型实际测一下。

为什么容器看不到我的显卡?

检查 Windows 驱动、wsl –update、Docker Desktop 的 WSL 2 后端和 –gpus 参数,然后运行 ollama ps。

怎样给 WSL 2 更多内存?

在 Windows 用户目录创建或编辑 .wslconfig,设置 memory,然后运行 wsl –shutdown。

Windows 里的应用能访问容器里的模型吗?

可以。微软文档把 localhostForwarding 的默认值列为 true,所以从 Windows 访问 localhost:11434 即可。

团队共用的服务器适合用 WSL 2 吗?

长期提供服务时,专用的 Linux 机器更稳,因为 Windows 的更新和睡眠可能中断 WSL 2 虚拟机。

和我们聊聊

显卡直通卡住了?欢迎来社区交流,或者发邮件到 admin@microaione.com。

参考资料:微软 WSL 安装文档、微软 .wslconfig 设置、NVIDIA CUDA on WSL 指南、Docker 的 Windows GPU 支持、Ollama Docker 文档。

类似文章