当前位置: 首页 > news >正文

配置daemon.json使得 Docker 容器能够使用服务器GPU【验证成功】

🥇 版权: 本文由【墨理学AI】原创首发、各位读者大大、敬请查阅、感谢三连

0-9

文章目录

    • 🔍你遇到的错误:
    • 🔍 根本原因
    • ✅ 解决方案:正确安装 NVIDIA Container Toolkit
      • ✅ 第一步:卸载旧版本(如果存在)
      • ✅ 第二步:添加 NVIDIA 仓库并安装
      • ✅ 第三步:安装 `nvidia-container-toolkit`
      • ✅ 第四步:配置 Docker 使用 NVIDIA 作为默认运行时
      • ✅ 第五步:重启 Docker
      • ✅ 第六步:验证安装是否成功
        • 1. 检查 `nvidia-container-runtime` 是否在 PATH
        • 2. 测试运行 GPU 容器
      • 这里我的验证命令和效果如下
      • ✅ 第七步:更新你的 `docker-compose.yml`
      • ✅ 第八步:重新构建并启动
    • ✅ 验证服务
    • 🎯 总结
    • ❤️ 一起学AI

🔍你遇到的错误:

exec: "nvidia-container-runtime": executable file not found in $PATH: unknown

说明:Docker 找不到 nvidia-container-runtime 这个可执行文件,这是 NVIDIA Docker 支持的核心组件。


🔍 根本原因

虽然你安装了 nvidia-docker2,但它的底层运行时 nvidia-container-runtime 没有被正确安装或没有加入系统 PATH


✅ 解决方案:正确安装 NVIDIA Container Toolkit

请按以下步骤 重新安装并配置 NVIDIA Container Toolkit


✅ 第一步:卸载旧版本(如果存在)

sudo apt-get purge -y nvidia-docker2 nvidia-container-toolkit
sudo rm -rf /etc/nvidia-container-runtime

✅ 第二步:添加 NVIDIA 仓库并安装

# 添加密钥和仓库
curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpgcurl -fsSL https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list# 更新包列表
sudo apt-get update

✅ 第三步:安装 nvidia-container-toolkit

sudo apt-get install -y nvidia-container-toolkit

⚠️ 注意:现在推荐使用 nvidia-container-toolkit 而不是旧的 nvidia-docker2


✅ 第四步:配置 Docker 使用 NVIDIA 作为默认运行时

sudo nvidia-ctk runtime configure --runtime=docker

这会自动修改 /etc/docker/daemon.json,添加:

{"default-runtime": "nvidia","runtimes": {"nvidia": {"path": "nvidia-container-runtime","runtimeArgs": []}}
}

✅ 第五步:重启 Docker

sudo systemctl restart docker

✅ 第六步:验证安装是否成功

1. 检查 nvidia-container-runtime 是否在 PATH
which nvidia-container-runtime

✅ 正常输出应为:

/usr/bin/nvidia-container-runtime
2. 测试运行 GPU 容器
docker run --rm --gpus all nvidia/cuda:11.8.0-base nvidia-smi

你应该看到类似这样的输出(显示你的 GPU 信息):

+-----------------------------------------------------------------------------+
| NVIDIA-SMI 525.60.13    Driver Version: 525.60.13    CUDA Version: 12.0     |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|                               |                      |               MIG M. |
|===============================+======================+======================|
|   0  Tesla T4            Off  | 00000000:00:1E.0 Off |                    0 |
| N/A   38C    P8     9W /  70W |      0MiB / 15360MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+

这里我的验证命令和效果如下

docker run -it --rm --gpus all pytorch/pytorch:2.7.0-cuda12.6-cudnn9-runtime /bin/bash# 进入容器内
root@e16c6f18b6bc:/workspace# nvidia-smi
Tue .. 2025       
+---------------------------------------------------------------------------------------+
| NVIDIA-SMI 535.183.01             Driver Version: 535.183.01   CUDA Version: 12.2     |
|-----------------------------------------+----------------------+----------------------+
| GPU  Name                 Persistence-M | Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp   Perf          Pwr:Usage/Cap |         Memory-Usage | GPU-Util  Compute M. |
|                                         |                      |               MIG M. |
|=========================================+======================+======================|
|   0  NVIDIA GeForce RTX 3090        Off | 00000000:01:00.0 Off |                  N/A |
|  0%   35C    P8              12W / 350W |  18396MiB / 24576MiB |      0%      Default |
|                                         |                      |                  N/A |
+-----------------------------------------+----------------------+----------------------++---------------------------------------------------------------------------------------+
| Processes:                                                                            |
|  GPU   GI   CI        PID   Type   Process name                            GPU Memory |
|        ID   ID                                                             Usage      |
|=======================================================================================|
+---------------------------------------------------------------------------------------+

✅ 第七步:更新你的 docker-compose.yml

你现在可以使用 --gpus 语法(推荐),不再需要 runtime: nvidia

services:web:build: .container_name: qwen-qa-webdeploy:resources:reservations:devices:- driver: nvidiacount: 1capabilities: [gpu]environment:- NVIDIA_VISIBLE_DEVICES=all- NVIDIA_DRIVER_CAPABILITIES=compute,utility- PYTHONUNBUFFERED=1- MODELSCOPE_CACHE=/app/modelsvolumes:- ./uploads:/app/uploads- ./models:/app/models- ./gunicorn.conf.py:/app/gunicorn.conf.pynginx:image: nginx:alpinecontainer_name: qwen-qa-nginxports:- "8083:80"volumes:- ./nginx.conf:/etc/nginx/nginx.conf- ./backend/static:/app/backend/static- ./backend/templates:/app/backend/templates- ./uploads:/app/uploadsdepends_on:- web

✅ 注意:移除了 runtime: nvidia,改用 deploy.resources.reservations.devices


✅ 第八步:重新构建并启动

docker-compose downdocker-compose up --build -d

✅ 验证服务

# 查看日志
docker logs qwen-qa-web -f

你应该看到:

  • Gunicorn 启动
  • Qwen3 模型开始加载(可能需要 2~5 分钟)
  • Nginx 成功代理请求

访问:http://your-server-ip:8083


🎯 总结

问题解决方案
nvidia-container-runtime not found安装 nvidia-container-toolkit
OCI runtime create failed使用 nvidia-ctk runtime configure 配置 Docker
runtime: nvidia 失效改用 deploy.resources.devices(Docker Compose v2+)

现在你的 Docker 应该可以 正确调用 GPU 来运行 Qwen3 模型了!

如果仍有问题,请运行:

nvidia-smidocker run --rm --gpus all nvidia/cuda:11.8.0-base nvidia-smi

❤️ 一起学AI


  • ❤️ 如果文章对你有些许帮助、蟹蟹各位读者大大点赞、评论鼓励博主的每一分认真创作

9-9

http://www.dtcms.com/a/303736.html

相关文章:

  • 界面控件Telerik UI for WPF 2025 Q2亮点 - 重要组件全新升级
  • 「源力觉醒 创作者计划」_文心大模型 4.5 多模态实测:开源加速 AI 普惠落地
  • VUE -- 基础知识讲解(一)
  • 从字符串中“薅出”最长子串:LeetCode 340 Swift 解法全解析
  • 分布式链路追踪详解
  • 如何用USRP捕获手机信号波形(中)手机/基站通信
  • Java面试宝典:MySQL8新特性底层原理
  • 设计模式:状态模式 State
  • 【Redis实现基础的分布式锁及Lua脚本说明】
  • 【CAN总线】STM32 的 CAN 总线通信开发笔记(基于 HAL)
  • Spring Boot 自动配置:从 2.x 到 3.x 的进化之路
  • Python 程序设计讲义(28):字符串的用法——格式化字符串
  • 【C++】第十九节—一文万字详解 | AVL树实现
  • Go进阶:流程控制(if/for/switch)与数组切片
  • adb reboot 与 adb shell svc power reboot 的区别
  • 爬虫自动化:一文掌握 PyAutoGUI 的详细使用
  • 【RH134 问答题】第 9 章 访问网络附加存储
  • 智能制造的空间度量:机器视觉标定技术解析
  • 数据结构【红黑树】
  • 架构实战——互联网架构模板(“用户层”和“业务层”技术)
  • MySql插入中文生僻字/Emoji报错django.db.utils.DataError: (1366, “Incorrect string value
  • 14、distance_object_model_3d算子
  • Web3 网络安全漏洞的预防措施
  • 解决IDEA拉取GitLab项目报错:必须为访问令牌授予作用域[api, read user]
  • 风口还是伪命题?AI + Web3 赛道价值何在?
  • Time drifts can result in unexpected behavior such as time-outs.
  • IDEA中全局搜索快捷键Ctrl+Shift+F为何失灵?探寻原因与修复指南
  • imx6ull-驱动开发篇3——字符设备驱动开发实验
  • 【C++算法】79.BFS解决FloodFill算法_图像渲染
  • 【C#|C++】C#调用C++导出的dll之非托管的方式