Skip to content

Docker GPU设备驱动错误解决方案

问题描述

在安装nvidia-docker2后运行GPU加速的Docker容器时,Docker返回错误:

bash
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参数引发设备驱动错误
  • 重启后问题依旧

根本原因

  1. NVIDIA Container Toolkit未正确安装或配置

    • 仅安装硬件驱动和nvidia-docker2并不足够
    • 需要完整的工具链支持
  2. Docker安装冲突

    • 常见于同时存在APT安装的Docker和Snap版Docker
    • Snap版Docker会阻止NVIDIA驱动加载
  3. 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信息而非错误!

诊断命令

检查运行时配置是否生效:

bash
docker info | grep -i runtime
# 输出应包含:nvidia

方案二:解决安装冲突

  1. 彻底移除所有Docker版本:
bash
sudo snap remove docker --purge  # 关键:移除Snap版
sudo apt purge docker-ce docker-ce-cli containerd.io
  1. 清理残留配置:
bash
sudo rm -rf /var/lib/docker
sudo rm -rf /etc/docker
  1. 从官方源重装Docker:
bash
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io
  1. 方案一安装NVIDIA Container Toolkit

方案三:验证CUDA工具包状态

  1. 检查主机CUDA状态:
bash
nvcc --version  # 若命令不存在则需安装
  1. 安装CUDA工具包(Ubuntu示例):
bash
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
  1. 方案一安装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 Toolkitnvidia-ctk命令可用完整安装NVIDIA工具包
运行时配置docker info显示nvidia运行时重配置并重启Docker

终极修复流程:

遵循此流程逐步排除,即可彻底解决Docker无法加载GPU设备驱动的问题!