【docker】win10 wsl docker不能挂GPU

问题

shell 复制代码
sudo docker run -d  -p 2222:22 --gpus all  【略】

出现

复制代码
docker: Error response from daemon: failed to create task for container: failed to create shim task: OCI runtime create failed: runc create failed: unable to start container process: error during container init: error running prestart hook #0: exit status 1, stdout: , stderr: Auto-detected mode as 'legacy'

nvidia-container-cli: mount error: lstat failed: /usr/lib/wsl/lib/libnvidia-gpucomp.so.580.105.07: no such file or directory: unknown

gemini首次回答未解决

这是一个非常经典的 WSL2 + Docker GPU 透传错误。

报错的核心在于这句:lstat failed: /usr/lib/wsl/lib/libnvidia-gpucomp.so.580.105.07: no such file or directory

原因分析:

在 WSL2 环境下,Linux 里面并没有真正安装显卡驱动,而是由 Windows 宿主机强行将底层的驱动文件(.so 文件)映射到了 WSL 的 /usr/lib/wsl/lib/ 目录下。

当你最近在 Windows 上更新了显卡驱动(版本更新到了 580.105.07),或者 Windows 后台自动刷新了驱动状态,但当前的 WSL 实例没有重启,就会导致映射路径不同步。Docker 试图去挂载新版本的驱动库,却在 WSL 的旧映射目录下找不到它。

要解决这个问题,请按以下步骤操作:

步骤 1:强制重启 WSL(最关键)

必须让 WSL 彻底关闭并重新冷启动,以重新映射 Windows 的新版驱动文件。

  1. 打开 Windows 的 PowerShell 或 CMD(不是在 Ubuntu 里)。

  2. 执行以下命令强制关闭所有 WSL 实例:

    cmd 复制代码
    wsl --shutdown
  3. 等待几秒钟后,重新打开你的 Ubuntu/WSL 终端。

步骤 2:验证驱动文件是否重新挂载

回到你的 Ubuntu 终端,检查那个报错的库文件现在是否出现了:

bash 复制代码
ls -l /usr/lib/wsl/lib/libnvidia-gpucomp*
  • 结果判断: 如果能看到输出(类似指向 libnvidia-gpucomp.so.580.105.07 的文件),说明同步成功。

步骤 3:重置 Docker GPU 运行时(保险起见)

有时候驱动更新后,NVIDIA Container Toolkit 也需要重新生成一下配置文件。在 Ubuntu 终端执行:

bash 复制代码
# 重新配置 runtime
sudo nvidia-ctk runtime configure --runtime=docker

完成这三步后,再次运行你的 sudo docker run ... 命令,应该就能顺利拉起带有 4090 GPU 的容器了。

查看libnvidia-gpucomp*

只有 /usr/lib/wsl/lib/libnvidia-gpucomp.so

gemini第二次回答 【解决】

这个输出非常清晰地说明了问题:文件确实存在,只是缺少了版本号后缀。

这是最近 Windows NVIDIA 驱动(580.x 系列)和 WSL2 Docker 结合时的一个已知官方 Bug。Docker 底层的 nvidia-container-cli 非常死板,它探测到你的驱动版本是 580.105.07,就强制要求去挂载 libnvidia-gpucomp.so.580.105.07,但 Windows 映射进来的本体却只有不带版本号的 libnvidia-gpucomp.so

要解决这个问题,我们需要手动给它建一个带版本号的软链接(快捷方式)骗过 Docker。但由于 /usr/lib/wsl/lib 这个目录在 WSL 中是只读系统(Read-only file system),我们无法直接在里面创建文件。

请严格按顺序在终端执行以下 4 条命令,使用"偷梁换柱"的挂载大法来修复:

bash 复制代码
# 1. 将现有的只读驱动库完整复制到一个新建的可写目录中
sudo cp -r /usr/lib/wsl/lib /usr/lib/wsl/lib_custom

# 2. 在这个新目录里,创建一个 Docker 想要的带版本号的软链接
sudo ln -s /usr/lib/wsl/lib_custom/libnvidia-gpucomp.so /usr/lib/wsl/lib_custom/libnvidia-gpucomp.so.580.105.07

# 3. 使用 bind 挂载,用我们修改好的新目录强行覆盖掉原本的只读目录
sudo mount --bind /usr/lib/wsl/lib_custom /usr/lib/wsl/lib

# 4. 重启 Docker 服务使配置生效
sudo service docker restart

执行完这四步后,再次运行你的 sudo docker run ... 命令,就能完美启动并透传 4090 了。

写入bashrc

复制代码
# ====================================================
# 修复 WSL2 Docker GPU 驱动挂载丢失版本号的问题 (580.105.07)
# 注意:/usr/lib/wsl/lib_custom 目录及其软链接必须已提前创建好
# ====================================================
if [ ! -f "/usr/lib/wsl/lib/libnvidia-gpucomp.so.580.105.07" ]; then
    echo "🔍 检测到 WSL 驱动映射重置,正在应用 GPU 挂载补丁..."
    # 执行挂载并重启 Docker,此处会要求输入一次你的 joy 用户密码
    sudo mount --bind /usr/lib/wsl/lib_custom /usr/lib/wsl/lib
    sudo service docker restart
    echo "✅ GPU 驱动补丁已生效!"
fi
相关推荐
大树882 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠2 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质2 天前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
Inhand陈工2 天前
基于台达PLC与映翰通IG502的智慧水产养殖精准投喂与远程运维解决方案
运维·人工智能·物联网·阿里云·信息与通信
Alsn862 天前
等待学习-学习目录:Docker 容器安全攻防
学习·安全·docker
酣大智2 天前
ARP代理--工作原理
运维·网络·arp·arp代理
shushangyun_2 天前
2026年快消品B2B系统推荐:支持终端门店订货、促销政策自动化的工具?
java·运维·网络·数据库·人工智能·spring·自动化
施努卡机器视觉2 天前
SNK施努卡侧滑门锁上滑轮总成自动化装配线,从零件到组件,全流程精密制造方案
运维·自动化·制造
AC赳赳老秦2 天前
用 OpenClaw 搭建服务器故障应急响应系统,自动处理 80% 常见运维故障
android·运维·服务器·python·rxjava·deepseek·openclaw
2601_961875242 天前
决战申论100题2026|最新|范文
linux·容器·centos·debian·ssh·fabric·vagrant