[email protected] docker + nvidia-container-toolkit 支持容器使用gpu

Rocky Linux 9.5 上使用 Docker + NVIDIA Container Toolkit 来支持容器使用 GPU(例如运行使用 CUDA 的容器)是完全可行的。以下是详细的安装与配置步骤:


1.安装 NVIDIA 驱动

确保宿主机上已正确安装 NVIDIA 驱动(非 nouveau 驱动)。

1
nvidia-smi

如果这个命令能输出 GPU 信息,说明驱动已经安装好了。

这个是必备条件


2.安装 Docker

  1. 安装依赖:
1
sudo dnf install -y dnf-plugins-core
  1. 添加 Docker 仓库并安装:
1
2
3
sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

sudo dnf install -y docker-ce docker-ce-cli containerd.io

保存docker-ce依赖包

mkdir docker-ce

dnf download --resolve docker-ce docker-ce-cli containerd.io

e7dc0d2409ba7ba6c4bb6aa05d082d5a.png

/etc/docker/daemon.json
{
        "exec-opts": ["native.cgroupdriver=systemd"],  
        "data-root": "/data/docker_root",
        "log-driver": "json-file",
        "log-opts": {
          "max-size": "100m",
          "max-file": "10"
        },
        "registry-mirrors":["https://jnxt8d8b.mirror.aliyuncs.com"],
        "insecure-registries": ["172.16.243.221"]
}
  1. 启动并设置开机自启:
1
sudo systemctl enable --now docker

3.安装 NVIDIA Container Toolkit

  1. 添加 NVIDIA 官方软件源:
1
2
3
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -s -L https://nvidia.github.io/libnvidia-container/$distribution/libnvidia-container.repo | \
sudo tee /etc/yum.repos.d/nvidia-container-toolkit.repo

⚠️ 注意:$distribution 对于 Rocky 9.5 是 rhel9.5,如果失败,请手动替换:

1
2
curl -s -L https://nvidia.github.io/libnvidia-container/rhel9.5/libnvidia-container.repo | \
sudo tee /etc/yum.repos.d/nvidia-container-toolkit.repo
#Configure the repository
curl -s -L https://nvidia.github.io/libnvidia-container/stable/rpm/nvidia-container-toolkit.repo \
    | tee /etc/yum.repos.d/nvidia-container-toolkit.repo
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
/etc/yum.repos.d/nvidia-container-toolkit.repo
[nvidia-container-toolkit]
name=nvidia-container-toolkit
baseurl=https://nvidia.github.io/libnvidia-container/stable/rpm/$basearch
repo_gpgcheck=1
gpgcheck=0
enabled=1
gpgkey=https://nvidia.github.io/libnvidia-container/gpgkey
sslverify=1
sslcacert=/etc/pki/tls/certs/ca-bundle.crt

[nvidia-container-toolkit-experimental]
name=nvidia-container-toolkit-experimental
baseurl=https://nvidia.github.io/libnvidia-container/experimental/rpm/$basearch
repo_gpgcheck=1
gpgcheck=0
enabled=0
gpgkey=https://nvidia.github.io/libnvidia-container/gpgkey
sslverify=1
sslcacert=/etc/pki/tls/certs/ca-bundle.crt

  1. 安装 NVIDIA Container Toolkit:
1
sudo dnf install -y nvidia-container-toolkit
mkdir nvidia-container && nvidia-container

dnf download --resolve nvidia-container-toolkit
  1. 配置 Docker 使用 NVIDIA runtime:
1
sudo nvidia-ctk runtime configure --runtime=docker
  1. 重启 Docker:
1
sudo systemctl restart docker

4.测试 GPU 是否可用

使用 NVIDIA 提供的 CUDA 测试容器:

1
2
3
sudo docker run --rm --gpus all nvidia/cuda:12.2.0-base-ubuntu22.04 nvidia-smi

docker run -it --gpus all python:3.13 bash

如果输出类似 nvidia-smi 的 GPU 信息,说明配置成功。


5.可能的排错

  • 如果容器里 nvidia-smi 报错,确认:

    • 宿主机驱动版本 >= CUDA 容器需要的驱动版本。
    • 使用了 --gpus all 参数。
    • docker info 输出中包含 "nvidia" runtime。

Refer