必须安装NVIDIA驱动和nvidia-container-toolkit,配置Docker daemon后使用--gpus参数(如--gpus all)启动容器,才能在Docker中正常调用宿主机NVIDIA GPU。

要在 Docker 容器内调用物理 GPU(如 NVIDIA 显卡),不能只靠 docker run --device 简单映射设备节点,必须配合 GPU 驱动支持与运行时环境。Docker 原生的 --device 只能暴露 /dev/nvidia* 设备文件,但缺少驱动库、CUDA 工具链和运行时协调,容器内仍无法正常使用 GPU。
确认宿主机已正确安装 NVIDIA 驱动
这是前提条件。运行以下命令验证:
nvidia-smi
若报错或无输出,说明驱动未就绪。请从 NVIDIA 官网下载匹配显卡型号和内核版本的驱动,并完成安装(注意禁用 Nouveau、重启后验证)。
安装 nvidia-container-toolkit(推荐方式)
这是目前最标准、兼容性最好的方案,替代旧版 nvidia-docker2。它让 Docker 能自动挂载驱动库、设备节点和 CUDA 相关路径。
- 添加 NVIDIA 包仓库并安装 toolkit(以 Ubuntu 22.04 为例):
curl -sL https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add - distribution=$(. /etc/os-release;echo $ID$VERSION_ID) curl -sL https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list sudo apt-get update && sudo apt-get install -y nvidia-container-toolkit
- 配置 Docker daemon 使用该 runtime:
sudo tee /etc/docker/daemon.json <<'EOF'
{
"runtimes": {
"nvidia": {
"path": "/usr/bin/nvidia-container-runtime",
"runtimeArgs": []
}
},
"default-runtime": "runc"
}
EOF
sudo systemctl restart docker运行容器时启用 GPU 支持
不再依赖手动 --device,而是使用 --gpus 参数(Docker 19.03+ 内置支持):
- 使用所有 GPU:
docker run --gpus all -it nvidia/cuda:11.8-base-ubuntu20.04 nvidia-smi - 指定某张 GPU(如索引 0):
docker run --gpus device=0 -it ... - 限制显存或算力(需配合 nvidia-container-toolkit v1.12+ 和驱动支持):
docker run --gpus '"device=0,capabilities=compute,utility"'
注意:基础镜像需含 NVIDIA 驱动兼容的 CUDA 运行时(如 nvidia/cuda 官方镜像),自定义镜像中应安装对应版本的 cuda-toolkit 或 cuda-runtime。
不推荐的手动 --device 方式(仅作了解)
若因特殊原因必须绕过 nvidia-container-toolkit,可手动映射,但极易出错:
- 需同时挂载:
/dev/nvidia0,/dev/nvidiactl,/dev/nvidia-uvm,/dev/nvidia-modeset(若有) - 还需绑定挂载宿主机驱动库:
-v /usr/lib/x86_64-linux-gnu/libcuda.so.1:/usr/lib/x86_64-linux-gnu/libcuda.so.1(路径依驱动版本而异) - 容器内仍需安装匹配的
nvidia-cuda-toolkit,且 CUDA 版本不能高于宿主机驱动支持上限(查 CUDA 兼容表)
该方式缺乏自动校验、权限管理与多卡隔离,不建议生产环境使用。


















