可以从“实际运行的 daemon”判断,不能只看 docker --version

# Docker 客户端来自哪里
command -v docker
readlink -f "$(command -v docker)"
dpkg -S "$(readlink -f "$(command -v docker)")" 2>/dev/null

# apt / deb 安装的 Docker 服务
systemctl status docker --no-pager
systemctl show docker -p FragmentPath

# Snap 安装的 Docker 服务
snap list docker
snap services docker

# 确认当前 docker CLI 实际连接到哪个 daemon
docker context show
docker context inspect "$(docker context show)"
docker info --format 'root={{.DockerRootDir}} version={{.ServerVersion}}'

判断标准:

  • 路径是 /snap/bin/docker,且 snap services dockerdockerd 在运行:Snap Docker。
  • dpkg -S 显示 docker.iodocker-ce-cli 等,且 docker.service 在运行:apt/deb Docker。
  • 两者都装了时,以 docker context inspect 和实际运行的服务为准。

检查 NVIDIA Container Toolkit:

nvidia-ctk --version
dpkg -l | awk '/nvidia-container-toolkit|libnvidia-container/ {print $2, $3}'
apt-cache policy nvidia-container-toolkit nvidia-container-toolkit-base libnvidia-container1

# 检查 Docker 是否已加载 NVIDIA runtime
docker info --format 'runtimes={{json .Runtimes}} default={{.DefaultRuntime}}'

nvidia-container-toolkit 没有与 Docker 版本一一对应的“同版本包”;它主要匹配 Ubuntu 版本、CPU 架构和 NVIDIA 驱动。Docker 能看到 nvidia runtime 才是关键。

你截图中的:

sudo nvidia-ctk runtime configure --runtime=docker

默认修改的是 /etc/docker/daemon.json,这是 apt/deb Docker 的标准位置。若实际是 Snap Docker,它通常不使用这个配置路径,因此不存在直接“对应的 Snap Toolkit 版本”;实际部署通常建议改用 apt/deb Docker,再安装 APT 的 nvidia-container-toolkit。当前截图中出现 docker.service,看起来更像是 apt/deb Docker。

怎么知道是否已经在apt版本的docker下安装了nvidia toolkit?(下面的已验证,更好用)

这张图的 JSON 太长,画面只显示到第一个 runtime,不能据此判断有没有 nvidia

依次执行这三项:

# 1. APT 包是否已安装:每项开头是 ii 即已安装
dpkg -l nvidia-container-toolkit nvidia-container-toolkit-base libnvidia-container1

# 2. 标准 docker.service 是否已注册 NVIDIA runtime
sudo docker info --format '{{range $name, $_ := .Runtimes}}{{println $name}}{{end}}'

# 3. Toolkit 命令是否可用、版本是什么
nvidia-ctk --version

第 2 项的正确输出至少应包含:

runc
nvidia

判断:

  • APT 包为 ii,且 runtime 列表有 nvidia:已成功装到宿主机,并已接入当前 apt/deb Docker。
  • APT 包为 ii,但没有 nvidia:Toolkit 已安装,但 Docker 没有加载配置。执行:
sudo systemctl daemon-reload
sudo systemctl restart docker

然后再运行第 2 项确认。

最后做实际 GPU 验证。先看宿主机驱动:

nvidia-smi

再以与你驱动兼容的 CUDA 镜像测试:

sudo docker run --rm --gpus all nvidia/cuda:<CUDA版本>-base-ubuntu22.04 nvidia-smi

容器内能显示 GPU 和驱动信息,才说明整条链路可用。
***本文内容由AI生成,记录下来是为了找起来方便***

更多推荐