docker-如何在容器内使用显卡资源
1. 为什么需要 NVIDIA Container Toolkit?
在 Docker 中运行深度学习、AI 计算或图形渲染应用时,通常需要调用 GPU 加速。但默认情况下,Docker 容器无法直接访问宿主机的 NVIDIA 显卡,这时就需要 NVIDIA Container Toolkit(原名 nvidia-docker)来打通容器与 GPU 之间的桥梁。
核心功能
- 允许 Docker 容器直接访问宿主机上的 NVIDIA GPU。
 - 自动挂载 GPU 驱动和 CUDA 库到容器内。
 - 兼容主流容器运行时(Docker、containerd、Podman)。
 
2. NVIDIA Container Toolkit 组件解析
该工具包主要由以下组件构成:
| 组件名称 | 作用 | 
|---|---|
nvidia-container-toolkit | 
核心组件,负责在容器启动时注入 GPU 相关设备与驱动。 | 
libnvidia-container | 
底层库,处理容器与 GPU 的交互逻辑。 | 
nvidia-container-runtime | 
替换 Docker 默认的 runc,支持 GPU 设备的动态绑定。 | 
3. 手动安装步骤(附脚本解析)
以下是你的脚本逐行解析,已优化为完整安装流程:
步骤 1:添加 GPG 密钥
1  | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg ./gpgkey  | 
./gpgkey是我下载到本地的gpgkey文件
- 作用:将 NVIDIA 的 GPG 密钥转换为二进制格式,确保软件包来源可信。
 
步骤 2:配置镜像源(国内加速)
1  | curl -s -L https://mirrors.ustc.edu.cn/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \  | 
- 关键点:  
- 使用中科大镜像源(
mirrors.ustc.edu.cn)替代官方源,加速下载。 [signed-by]指定密钥路径,避免安全警告。
 - 使用中科大镜像源(
 
步骤 3:安装工具包
1  | sudo apt-get update  | 
- 注意:安装时会自动依赖 
libnvidia-container和nvidia-container-runtime。 
步骤 4:配置 Docker 运行时
1  | sudo nvidia-ctk runtime configure --runtime=docker  | 
- 作用:  
nvidia-ctk命令生成/etc/docker/daemon.json,将默认运行时替换为nvidia-container-runtime。- 重启 Docker 使配置生效。
 
 
4. 验证安装是否成功
运行一个测试容器,检查 GPU 是否可见:
1  | docker run --rm --gpus all nvidia/cuda:12.2-base nvidia-smi  | 
预期输出:
1  | +-----------------------------------------------------------------------------+  | 
--gpus all:允许容器使用所有 GPU。- 若看到 GPU 信息,则配置成功!
 
5. 常见问题与解决方案
Q1:安装后 Docker 无法启动
- 原因:
daemon.json配置错误。 - 修复:  
1
2sudo rm /etc/docker/daemon.json
sudo systemctl restart docker 
Q2:容器内无法找到 GPU
- 检查项:  
- 宿主机驱动是否正常(
nvidia-smi能否运行)。 - Docker 运行时是否为 
nvidia(docker info | grep Runtime)。 
 - 宿主机驱动是否正常(
 
Q3:如何指定使用特定 GPU?
1  | docker run --gpus '"device=0,1"' nvidia/cuda:11.0-base nvidia-smi # 仅使用 GPU 0 和 1  | 
6. 提一嘴:Kubernetes 中的 GPU 支持
若需在 K8S 中使用 GPU,需额外配置:
- 安装 NVIDIA Device Plugin:  
1
kubectl apply -f https://raw.githubusercontent.com/NVIDIA/k8s-device-plugin/v0.14.1/nvidia-device-plugin.yml
 - 在 Pod 中声明资源:  
1
2
3resources:
limits:
nvidia.com/gpu: 1 
7. 总结
- NVIDIA Container Toolkit 是 Docker 调用 GPU 的必备工具。
 - 通过 
--gpus参数控制容器对 GPU 的访问权限。 - 生产环境中建议结合 Kubernetes Device Plugin 管理集群 GPU 资源。
 
你的安装脚本已完美覆盖关键步骤,建议保存为 install-nvidia-docker.sh 方便复用!  
附完整脚本:
1  | 
  | 
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 念念不忘,必有回响!










