docker: Error response from daemon: could not select device driver ““ with capabilities: [[gpu]].
这个错误表明Docker无法识别或加载支持GPU所需的设备驱动程序。以下是完整的解决方案和根本原因分析,结合最新技术和实践整理:
根本原因分析
- 缺少NVIDIA Container Toolkit
现代Docker依赖NVIDIA Container Toolkit(前身为nvidia-docker2)实现GPU透传,未安装时无法调用GPU驱动。 - Docker配置未启用NVIDIA运行时
需在daemon.json
中声明NVIDIA运行时,否则Docker引擎无法识别GPU设备。 - 驱动或工具包版本不兼容
主机NVIDIA驱动版本需与容器要求的CUDA版本兼容(可通过nvidia-smi
验证驱动版本)。 - 未重启服务导致配置未生效
安装工具包或修改配置后必须重启Docker服务。
完整解决方案
步骤1:验证主机GPU环境
nvidia-smi # 确认驱动正常安装,输出应包含GPU型号和驱动版本
若命令未找到,需先安装NVIDIA驱动。
步骤2:安装NVIDIA Container Toolkit
Ubuntu/Debian系统:
# 添加仓库并安装distribution=$(. /etc/os-release; echo $ID$VERSION_ID)curl -s -L https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpgcurl -s -L https://nvidia.github.io/libnvidia-container/$distribution/libnvidia-container.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.listsudo apt-get updatesudo apt-get install -y nvidia-container-toolkit
CentOS/RHEL系统:
参见NVIDIA官方指南。
步骤3:配置Docker使用NVIDIA运行时
sudo tee /etc/docker/daemon.json <<EOF{ \"runtimes\": { \"nvidia\": { \"path\": \"nvidia-container-runtime\", \"runtimeArgs\": [] } }, \"default-runtime\": \"nvidia\" # 可选:设为默认运行时}EOFsudo systemctl restart docker # 重启Docker生效
步骤4:验证GPU容器运行
docker run --rm --gpus all nvidia/cuda:11.8.0-base nvidia-smi # 应输出与主机相同的GPU信息
特殊情况处理
-
Windows/macOS环境
Docker Desktop默认无GPU支持,需:- Windows:安装WSL2并在Linux子系统内配置。
- macOS:仅部分M系列芯片支持,需使用Docker Desktop 4.25+。
-
docker-compose启用GPU
在服务配置中添加deploy.resources
段:services: ai-service: deploy: resources: reservations: devices: - driver: nvidia count: 1 # 使用1块GPU capabilities: [gpu]
-
离线安装
下载离线包(libnvidia-container、nvidia-container-toolkit),手动安装后重启服务。
验证与调试
- 检查工具包状态:
dpkg -l | grep nvidia-container-toolkit
- 查看Docker运行时:
docker info | grep -i nvidia
- 错误日志定位:
journalctl -u docker.service | grep -i gpu
⚠️ 注意:若仍报错,尝试重启主机以加载内核模块(常见于Ubuntu)。