Docker / WSL2 里 GPU 用不了:驱动在宿主机,容器里只装 runtime

环境与安装 · 2 条线 / 8 步 / 10 分钟L1整理于 2026-10-06 有效期 180d

宿主机的 nvidia-smi 一切正常,进了容器就报 could not select device driver 或 nvidia-smi 找不到 —— 根因是容器默认不把 GPU 传进去,必须装 nvidia-container-toolkit 且加 --gpus all。最高频的误判是在容器里装显卡驱动:驱动必须装在宿主机,容器里只需要 CUDA runtime。WSL2 则是另一条线,显存与 Windows 共享且有版本门槛。

本地大模型部署排错DockerWSL2GPU

这条适用于

版本指纹

Windows 11 + Docker Desktop + WSL2;命令来自 Docker/NVIDIA 官方文档口径(非本机实测)

具体做法

# ========== 线 1:Docker 容器内 GPU 不可用 ==========
# 报错样例:
#   docker: Error response from daemon: could not select device driver "" with capabilities: [[gpu]]
# ① 宿主机先确认驱动在(这一步不通,后面都白搭)
$ nvidia-smi
# ② 安装容器工具包(Ubuntu 例)
$ sudo apt-get install -y nvidia-container-toolkit
$ sudo systemctl restart docker
# ③ 启动容器时必须显式请求 GPU
$ docker run --rm --gpus all nvidia/cuda:12.4.0-base-ubuntu22.04 nvidia-smi
#                    ^^^^^^^^^^^ 少了这个,容器里永远看不到卡

④ 容器内用 nvidia-smi 验证;能用即直通成功

# ========== 线 2:WSL2 显存/GPU 异常 ==========
# ① 确认 WSL 已是较新版本(旧版有显存识别 bug)
$ wsl --version
# ② 在 %UserProfile%\.wslconfig 里配置(改完必须 wsl --shutdown 重启)
# [wsl2]
# memory=48GB
# processors=16
$ wsl --shutdown
# ③ WSL 内验证
$ nvidia-smi        # 应能直接看到卡(WSL 走的是 Windows 驱动,不需另装)
失效边界
适用边界:两条线(Docker 直通 / WSL2 共享)症状相似但根因不同,先判断自己属于哪条。本机环境为 Windows 11 + Docker Desktop + WSL2,未在本机复现容器直通(本机以原生 Windows 跑 ComfyUI 为主),命令来自 Docker 与 NVIDIA 官方文档口径,非本机实测值。一个易踩点:WSL2 的显存是动态占用、与 Windows 共享,nvidia-smi 显示的「总显存」不等于你能独占的显存。
← 「装不上就重装」之前,先看四种「装不上」各要多少代价模型加载报 header / deserializing 错:改配置全白搭,先比对文件大小 →

← 返回全部排错方案