Docker GPU设备驱动错误解决方案
问题描述
在安装nvidia-docker2
后运行GPU加速的Docker容器时,Docker返回错误:
docker: Error response from daemon: could not select device driver "" with capabilities: [[gpu]]
即使主机上nvidia-smi
命令工作正常,NVIDIA驱动已更新,且系统已重启,该错误仍然存在!
常见环境
- Ubuntu 22.04或其他Linux发行版
- 已安装官方Docker或snap版Docker
- NVIDIA驱动程序已安装
- 已按官方文档安装nvidia-docker2
关键症状指标
- NVIDIA主机驱动正常,但Docker容器内无法访问GPU
--gpus all
参数引发设备驱动错误- 重启后问题依旧
根本原因
NVIDIA Container Toolkit未正确安装或配置
- 仅安装硬件驱动和
nvidia-docker2
并不足够 - 需要完整的工具链支持
- 仅安装硬件驱动和
Docker安装冲突
- 常见于同时存在APT安装的Docker和Snap版Docker
- Snap版Docker会阻止NVIDIA驱动加载
CUDA工具包缺失
- 主机仅安装显卡驱动,未安装CUDA开发套件
冲突警告
sudo snap install docker
可能导致与APT源安装的Docker产生冲突,优先卸载Snap版
解决方案
方案一:完整安装NVIDIA Container Toolkit(推荐)
=== "配置仓库密钥" bash curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | \ sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg
=== "添加APT源" bash curl -s -L 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 update
=== "安装工具包" bash sudo apt install -y nvidia-container-toolkit
=== "配置Docker运行时" bash sudo nvidia-ctk runtime configure --runtime=docker sudo systemctl restart docker
=== "验证安装" bash sudo docker run --rm --gpus all nvidia/cuda:12.2.0-base nvidia-smi # 应输出GPU信息而非错误!
诊断命令
检查运行时配置是否生效:
docker info | grep -i runtime
# 输出应包含:nvidia
方案二:解决安装冲突
- 彻底移除所有Docker版本:
sudo snap remove docker --purge # 关键:移除Snap版
sudo apt purge docker-ce docker-ce-cli containerd.io
- 清理残留配置:
sudo rm -rf /var/lib/docker
sudo rm -rf /etc/docker
- 从官方源重装Docker:
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io
- 按方案一安装NVIDIA Container Toolkit
方案三:验证CUDA工具包状态
- 检查主机CUDA状态:
nvcc --version # 若命令不存在则需安装
- 安装CUDA工具包(Ubuntu示例):
wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/cuda-keyring_1.1-1_all.deb
sudo dpkg -i cuda-keyring_1.1-1_all.deb
sudo apt update
sudo apt install -y cuda-toolkit-12-4
- 按方案一安装NVIDIA Container Toolkit
验证说明
成功配置后运行测试容器应显示:
+---------------------------------------------------------------------------+
| NVIDIA-SMI 535.161.07 Driver Version: 535.161.07 CUDA Version: 12.2 |
|-------------------------------+----------------------+-------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|===============================+======================+=====================|
| 0 NVIDIA GeForce ... On | 00000000:01:00.0 Off | N/A |
| N/A 45C P0 25W / N/A | 0MiB / 12288MiB | 0% Default |
| | | N/A |
+-------------------------------+----------------------+-------------------+
版本兼容性注意
确保Docker镜像(如nvidia/cuda:12.2.0-base
)中的CUDA版本不高于主机驱动版本
总结思路
检查项 | 通过标准 | 修复方法 |
---|---|---|
Docker安装方式 | 仅保留APT官方源安装 | 移除Snap版并清理残留文件 |
Container Toolkit | nvidia-ctk 命令可用 | 完整安装NVIDIA工具包 |
运行时配置 | docker info 显示nvidia运行时 | 重配置并重启Docker |
终极修复流程:
遵循此流程逐步排除,即可彻底解决Docker无法加载GPU设备驱动的问题!