关键在于通过 daemon.json 声明 NVIDIA 运行时,配合已安装的 nvidia-container-toolkit;需确保宿主机驱动兼容(≥525)、toolkit 已安装、nvidia-container-runtime 在 PATH 中,配置时保留 default-runtime 为 runc,仅用 --gpus 显式启用 GPU。要让 Docker 容器使用 GPU,关键不是靠 `daemon.json` 单独“开启 GPU”,而是通过它**声明并启用 NVIDIA 运行时**,配合已安装的 `nvidia-container-toolkit`。`daemon.json` 本身不实现 GPU 功能,只告诉 Docker 引擎:“当用户指定 `--gpus` 时,请调用 `nvidia-container-runtime` 来处理设备挂载和库注入”。 以下是实际有效的配置方式和注意事项:
确认前提条件已满足
在改 `daemon.json` 前,请确保:
- 宿主机已安装兼容版本 NVIDIA 驱动(运行 nvidia-smi 能正常显示 GPU 信息)
- 已安装 nvidia-container-toolkit(推荐,非旧版 nvidia-docker2)
- nvidia-container-runtime 可执行文件已在系统 PATH 中(通常安装 toolkit 后自动提供)
daemon.json 中的正确 runtime 配置
编辑 /etc/docker/daemon.json,添加或修改以下内容:
{
"runtimes": {
"nvidia": {
"path": "nvidia-container-runtime",
"runtimeArgs": []
}
},
"default-runtime": "runc"
}
说明:
-
不要设
"default-runtime": "nvidia"—— 这会让所有容器默认走 GPU 运行时,但普通容器不需要 GPU,反而可能启动失败 -
保留
"default-runtime": "runc"(Docker 默认),仅对明确需要 GPU 的容器用--gpus显式触发 -
"path": "nvidia-container-runtime"必须准确;可用 which nvidia-container-runtime 验证路径
更推荐:用 nvidia-ctk 自动配置(避免手误)
手动编辑 `daemon.json` 容易出错。NVIDIA 官方工具提供了安全可靠的配置方式:
sudo nvidia-ctk runtime configure --runtime=docker
该命令会:
- 自动检测
nvidia-container-runtime路径 - 写入正确的 `runtimes` 配置到
/etc/docker/daemon.json - 默认不修改
default-runtime,保持安全策略
执行后必须重启 Docker:
sudo systemctl restart docker
验证配置是否生效
运行以下命令测试 GPU 是否可被容器识别:
docker run --rm --gpus 1 nvidia/cuda:12.0-base nvidia-smi
成功表现:
- 容器内能输出 GPU 列表(与宿主机
nvidia-smi一致) - 无报错:"could not select device driver"、"executable file not found in $PATH" 等
若失败,请优先检查 nvidia-container-runtime 是否在 PATH,以及驱动版本是否支持 CUDA 12.x(建议驱动 ≥ 525)











