让容器用上 GPU 的组件
容器本身看不到 GPU,需要容器工具链把设备节点与驱动库映射进去。流程分三步:安装工具链、把它注册成容器运行时、重启容器服务,然后用官方基础镜像验证透传。宿主机驱动是前提条件,容器里没有独立驱动,所谓透传就是把宿主的设备与库映射进容器的命名空间。
安装与配置(Ubuntu 示意)
安装与配置(Ubuntu 示意)
# 按官方文档添加软件源后安装
sudo apt update
sudo apt install -y nvidia-container-toolkit
# 把运行时注册到容器引擎并重启服务
sudo nvidia-ctk runtime configure --runtime=docker
sudo systemctl restart docker
# 确认运行时已被识别
docker info | grep -i nvidia验证透传
验证透传
# 用基础镜像验证:容器内能看到设备即算通过
docker run --rm --gpus all nvidia/cuda:12.4.1-base-ubuntu22.04 nvidia-smi -L
# 只给指定卡:核对设备数量是否符合预期
docker run --rm --gpus '"device=0,1"' nvidia/cuda:12.4.1-base-ubuntu22.04 nvidia-smi -L步骤与失败表现
| 步骤 | 漏做后的表现 |
|---|---|
| 安装工具链 | 启动容器时报找不到设备驱动选择器 |
| 注册运行时 | 安装完成但容器引擎不认识,症状与未安装相同 |
| 重启容器服务 | 配置未生效,仍按旧运行时启动 |
| 验证透传 | 问题留到业务容器上才暴露,排查成本更高 |
| 限制设备范围 | 业务容器拿到全部设备,资源隔离失效 |
典型使用场景
- 新机器初始化:装完驱动后补齐工具链,为后续容器化部署做准备
- 升级容器引擎后:重新注册运行时并验证透传仍然可用
- 多卡机器分配:用设备列表限制每个容器可见的卡
- CI 环境准备:把安装与验证步骤写进镜像构建流水线
- 故障排查:用基础镜像区分环境问题与业务镜像问题
宿主机驱动是前提:工具链只是搬运工,驱动异常时容器里同样看不到卡,验证顺序要自上而下。
注册运行时之后要重启容器服务:漏掉这一步会让人以为安装失败,重复安装也解决不了。