========================================
 Docker + NVIDIA GPU 安装总结
========================================
 日期: 2026-06-01
 系统: Ubuntu 24.04 LTS (Noble)
 GPU: NVIDIA GeForce RTX 5060
========================================

一、已安装组件
--------------
  • Docker Engine          v29.4.3   (清华镜像源安装)
  • NVIDIA Container Toolkit v1.19.1  (CUDA 源安装)
  • NVIDIA Driver          v580.126.09 (系统预装)
  • CUDA                   v13.0      (系统预装)

二、配置说明
--------------
  • Docker 已配置 NVIDIA runtime,支持 --gpus all 参数
  • CDI (Container Device Interface) 已注册 GPU
  • Docker 组已添加用户,退出重新登录后生效

三、常用命令
--------------
  1. 验证 GPU 访问:
     docker run --rm --gpus all nvcr.io/nvidia/cuda:12.8.0-base-ubuntu24.04 nvidia-smi

  2. 查看 Docker 版本:
     docker version

  3. 查看 GPU 状态:
     nvidia-smi

  4. 运行 GPU 容器并进入交互模式:
     docker run -it --rm --gpus all nvcr.io/nvidia/cuda:12.8.0-base-ubuntu24.04 bash

  5. 运行 AI/ML 容器 (PyTorch):
     docker run -it --rm --gpus all nvcr.io/nvidia/pytorch:24.12-py3 bash

四、注意事项
--------------
  • 首次使用 docker 命令如提示权限不足,请退出当前终端重新登录
  • 因网络限制,Docker Hub 不可访问,请使用 nvcr.io 拉取 NVIDIA 镜像
  • 其他 Docker 镜像可尝试使用 DaoCloud 等国内代理

五、验证记录
--------------
  容器内 nvidia-smi 输出正常, GPU 已识别
  设备: NVIDIA GeForce RTX 5060 (8151MiB)
  驱动: 580.126.09 / CUDA: 13.0

六、安装脚本

#!/bin/bash
set -euo pipefail

UBUNTU_CODENAME=$(lsb_release -cs)
ARCH=$(dpkg --print-architecture)

echo "============================================"
echo " Docker + NVIDIA GPU 一键安装脚本"
echo " 适用: Ubuntu x86_64, 需已安装 NVIDIA 驱动"
echo "============================================"

if [ "$(id -u)" -ne 0 ]; then
  echo "请使用 sudo 运行此脚本"
  exit 1
fi

# 1. 卸载旧版
echo ">>> 1/8 卸载旧版 Docker..."
for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do
  apt-get remove -y $pkg 2>/dev/null || true
done

# 2. 安装依赖
echo ">>> 2/8 安装依赖..."
apt-get update
apt-get install -y ca-certificates curl gpg

# 3. 添加 Docker 源(默认官方源,可改为 TUNA 等国内镜像)
#    国内镜像: https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/ubuntu
echo ">>> 3/8 添加 Docker 源..."
install -m 0755 -d /etc/apt/keyrings
curl -4 -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
chmod a+r /etc/apt/keyrings/docker.asc
echo "deb [arch=$ARCH signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu $UBUNTU_CODENAME stable" \
  > /etc/apt/sources.list.d/docker.list

# 4. 安装 Docker
echo ">>> 4/8 安装 Docker Engine..."
apt-get update
apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

# 5. 用户加入 docker 组
echo ">>> 5/8 添加用户到 docker 组..."
usermod -aG docker "${SUDO_USER:-$USER}"

# 6. 启动 Docker
echo ">>> 6/8 启动 Docker..."
systemctl enable docker
systemctl start docker

# 7. 安装 NVIDIA Container Toolkit(使用 CUDA 源,-4 强制 IPv4)
echo ">>> 7/8 安装 NVIDIA Container Toolkit..."
apt-get install -y libnvidia-container1 libnvidia-container-tools nvidia-container-toolkit 2>/dev/null || {
  # 如果 apt 源没有,直接从 NVIDIA CUDA 仓库下载 deb 安装
  BASE_URL="https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2404/x86_64"
  PKGS=(
    "libnvidia-container1_1.19.1-1_amd64.deb"
    "libnvidia-container-tools_1.19.1-1_amd64.deb"
    "nvidia-container-toolkit-base_1.19.1-1_amd64.deb"
    "nvidia-container-toolkit_1.19.1-1_amd64.deb"
  )
  TMP_DIR=$(mktemp -d)
  cd "$TMP_DIR"
  for pkg in "${PKGS[@]}"; do
    echo "   下载 $pkg ..."
    curl -4 -fsSL --connect-timeout 15 --max-time 120 "$BASE_URL/$pkg" -o "$pkg"
  done
  dpkg -i *.deb
  rm -rf "$TMP_DIR"
}

# 8. 配置 Docker 使用 NVIDIA runtime
echo ">>> 8/8 配置 NVIDIA runtime..."
nvidia-ctk runtime configure --runtime=docker
systemctl restart docker

echo ""
echo "============================================"
echo " 安装完成!"
echo ""
echo " 1. 退出当前终端重新登录(或执行 newgrp docker)"
echo "    使 docker 组权限生效"
echo ""
echo " 2. 验证 GPU 访问:"
echo "    docker run --rm --gpus all nvidia/cuda:12.8.0-base-ubuntu24.04 nvidia-smi"
echo ""
echo " 3. 如果 Docker Hub 被墙,改用 nvcr.io 镜像:"
echo "    docker run --rm --gpus all nvcr.io/nvidia/cuda:12.8.0-base-ubuntu24.04 nvidia-smi"
echo ""
echo " 4. 配置 Docker Hub 镜像加速(可选):"
echo '    echo "{\"registry-mirrors\":[\"https://docker.m.daocloud.io\"]}" \'
echo "      | sudo tee /etc/docker/daemon.json"
echo "    sudo systemctl restart docker"
echo "============================================"

更多推荐