news 2026/4/23 0:24:13

【docker】docker下如何使用宿主主机的GPU

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【docker】docker下如何使用宿主主机的GPU

不能直接用,默认隔离;要装 NVIDIA 容器工具包并加参数才能用宿主机 GPU。


一、为什么默认不能用

Docker 容器默认用命名空间 + cgroups隔离:

  • 看不见/dev/nvidia*设备
  • 没有宿主机 CUDA 库和驱动
  • 必须靠NVIDIA Container Toolkit打通

二、前提(NVIDIA GPU)

  1. 宿主机装好NVIDIA 驱动nvidia-smi能跑)
  2. 安装nvidia-container-toolkit(旧叫 nvidia-docker2)
  3. Docker ≥19.03(支持--gpus
Ubuntu 安装示例
distribution=$(./etc/os-release;echo$ID$VERSION_ID)curl-s-Lhttps://nvidia.github.io/nvidia-docker/gpgkey|sudoapt-keyadd-curl-s-Lhttps://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list|sudotee/etc/apt/sources.list.d/nvidia-docker.listsudoaptupdatesudoaptinstall-ynvidia-docker2sudosystemctl restartdocker

三、启动容器(关键参数)

--gpus分配 GPU:

# 所有 GPUdockerrun--gpusall-itnvidia/cuda:12.0-base nvidia-smi# 只给 GPU 0dockerrun--gpusdevice=0-itnvidia/cuda:12.0-base nvidia-smi# 给 GPU 0 和 1dockerrun--gpusdevice=0,1-itnvidia/cuda:12.0-base nvidia-smi

四、容器里能用到什么

  • 直接用宿主机物理 GPU(性能接近原生)
  • 容器内只需装应用 + CUDA 运行时,不用装驱动
  • 支持CUDA、cuDNN、TensorRT、FFmpeg 硬编解码

五、你的场景(WebRTC / 音视频)

  • 如果是NVIDIA GPU(如 Quadro、RTX)
    • 装好驱动 + 工具包,加--gpus all
    • 容器内可直接用NVENC/NVDEC硬编硬解,降低 CPU 占用
  • 如果是i5-7400 核显(HD 630)
    • Docker 对 Intel 核显支持有限,一般用VA-API 直通
    • 启动加--device /dev/dri,并挂载相关设备

六、一句话总结

默认隔离不能用;装 NVIDIA 工具包、用 --gpus 参数,容器就能直接调用宿主机 GPU 做硬编解码/AI 加速。

需要我给你一份可直接复制的安装和验证脚本吗?

结论先说:

Docker 18.09.7 不支持--gpus参数!
这个版本太老了,无法直接使用你刚才看到的现代 GPU 调用方式。


为什么不行?

  • --gpus all这个参数是Docker 19.03 版本才正式加入
  • 你的18.09.7属于旧版本,没有这个功能

那你现在有 2 个方案(都能用)

方案1:升级 Docker(推荐,最简单)

直接把 Docker 升级到19.03 以上(现在都 26+ 了)
升级后一句--gpus all就能用 GPU,最省心。


方案2:不升级 Docker,用旧版 nvidia-docker2(兼容 18.09)

你的18.09.7 可以用 nvidia-docker2,只是命令不一样:

1. 安装 nvidia-docker2(和刚才一样)
distribution=$(./etc/os-release;echo$ID$VERSION_ID)curl-s-Lhttps://nvidia.github.io/nvidia-docker/gpgkey|sudoapt-keyadd-curl-s-Lhttps://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list|sudotee/etc/apt/sources.list.d/nvidia-docker.listsudoaptupdatesudoaptinstall-ynvidia-docker2sudosystemctl restartdocker
2. 启动容器命令(必须用--runtime=nvidia
dockerrun--runtime=nvidia-itnvidia/cuda:12.0-base nvidia-smi

这样就能在 Docker 18.09 里用 GPU


给你总结最关键的

  • Docker 18.09.7 → 不支持 --gpus
  • 但支持 nvidia-docker2 → 用 --runtime=nvidia 就能调用宿主机 GPU
  • 性能和新版完全一样,只是命令不同

你如果不想升级 Docker

我可以直接给你:

  • 18.09 可用的docker-compose.yml 配置 GPU
  • 18.09 可用的FFmpeg + NVENC 硬解容器

需要吗?

好,我直接给你Docker 18.09.7 能用、完全适配旧版 nvidia-docker2的配置,包括:

  • docker-compose.yml 写法
  • 启动命令
  • 验证 GPU 是否成功的方法
  • 适合你音视频/WebRTC 场景的 FFmpeg 硬编解示例

全程不用升级 Docker。


1. 先确认你装好了 nvidia-docker2

如果还没装,执行这几句(复制粘贴即可):

distribution=$(./etc/os-release;echo$ID$VERSION_ID)curl-s-Lhttps://nvidia.github.io/nvidia-docker/gpgkey|sudoapt-keyadd-curl-s-Lhttps://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list|sudotee/etc/apt/sources.list.d/nvidia-docker.listsudoaptupdatesudoaptinstall-ynvidia-docker2sudosystemctl restartdocker

2. docker-compose.yml 配置(关键)

Docker 18.09 不支持deploy.resources,只能用runtime: nvidia

version:'2.3'# 必须用 2.3,不能用 3.xservices:media-server:image:你的镜像runtime:nvidia# 核心:启用GPUenvironment:-NVIDIA_VISIBLE_DEVICES=all# 使用所有GPU# 或只使用GPU0# - NVIDIA_VISIBLE_DEVICES=0ports:-"xxxx:xxxx"volumes:-./xxx:/xxx

重点:

  • version: '2.3'必须写
  • runtime: nvidia
  • 用环境变量NVIDIA_VISIBLE_DEVICES控制显卡

启动命令还是你原来的:

docker-composeup-d

3. 测试容器是否能看到 GPU

dockerrun--rm--runtime=nvidia nvidia/cuda:11.4.1-base nvidia-smi

能正常显示显卡型号、驱动版本 → 成功。


4. FFmpeg 使用 NVENC 硬编、NVDEC 硬解(你音视频场景)

在容器内执行:

硬解码 H.264

ffmpeg-hwaccelnvdec-iinput.mp4-fnull -

硬编码 H.264

ffmpeg-iinput.mp4-c:vh264_nvenc-b:v5M output.mp4

硬编码 H.265 (HEVC)

ffmpeg-iinput.mp4-c:vhevc_nvenc-b:v5M output.mp4

只要不报错,就是 GPU 正常工作。


5. 如果你用的是 Intel 核显(HD 630)

不用 nvidia,直接直通设备即可,docker-compose.yml:

version:'2.3'services:media-server:image:你的镜像devices:-/dev/dri:/dev/dri# 直通核显

容器内用 VA-API 硬解:

ffmpeg-hwaccelvaapi-iinput.mp4...

最简单总结(你记这两句就行)

  • Docker 18.09 →不能用 --gpus / deploy
  • 替代方案 →runtime: nvidia + NVIDIA_VISIBLE_DEVICES
  • docker-compose 必须用version: ‘2.3’

你把你的docker-compose.yml发给我,我可以直接帮你改成能跑 GPU 的版本。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/23 0:23:34

CCS12.1新功能救场:用Memory Allocation视图5分钟搞定CC8内存爆满报错

CCS12.1内存优化实战:可视化工具5分钟解决C2000内存溢出难题 当C2000开发者在CCS中看到"error #10099-D: program will not fit into available memory"这个红色报错时,传统做法往往是打开cmd文件开始手动计算内存地址——这种"盲人摸象&…

作者头像 李华
网站建设 2026/4/23 0:20:43

Wi-Fi CSI传感技术:非接触式人体活动识别原理与应用

1. Wi-Fi CSI人体活动识别技术概述Wi-Fi信道状态信息(CSI)传感技术正在重新定义非接触式人体活动识别(HAR)的技术边界。这项技术的核心在于利用无处不在的Wi-Fi信号作为感知媒介,通过分析2.4GHz/5GHz频段射频信号在传播过程中与人体交互产生的多径效应变化&#xff…

作者头像 李华
网站建设 2026/4/23 0:20:39

智能机器狗开发深度解析:从机械骨骼到感知大脑的技术演进之旅

智能机器狗开发深度解析:从机械骨骼到感知大脑的技术演进之旅 【免费下载链接】openDogV2 项目地址: https://gitcode.com/gh_mirrors/op/openDogV2 在机器人技术蓬勃发展的今天,构建一只能够感知环境、自主决策的智能机器狗,已不再是…

作者头像 李华
网站建设 2026/4/23 0:17:42

2026年AI抢人大战:这5个高薪岗位,你准备好了吗?

🔥最近科技圈最火的话题,非“AI抢人大战”莫属。 2026年1-2月,AI岗位数量同比暴涨约12倍,在新经济全部岗位中的占比从2.29%跃升至26.23%,平均月薪突破6万元,比新经济行业平均水平高出26%。 科锐国际2026薪酬…

作者头像 李华