unRAID系统配置
应用商店下载2个插件:Nvidia Driver 和 GPU Statistics
下载插件可能需要代理才能下载成功,由于 unRAID 下载插件都是通过 wget 工具,所以可以直接单独给 wget 配置代理。但是需要注意网络先不要启用 ipv6 (ipv4+ipv6),否则会因为优先使用 ipv6 访问而导致代理失败。
root@Master:~# cat << EOF >>/etc/wgetrc
https_proxy = http://192.168.1.1:1080/
http_proxy = http://192.168.1.1:1080/
EOF
安装好显卡驱动之后,需要重启 docker 服务或者直接重启系统来使驱动生效。作用应该就是重新加载运行时识别到显卡。
安装好 Nvidia Driver 插件后,也会一并安装 nvidia-container-runtime,并且会给 Docker Daemon 配置好 NVIDIA 运行时。
root@Master:~# cat /etc/docker/daemon.json
{
"runtimes": {
"nvidia": {
"path": "/usr/bin/nvidia-container-runtime",
"runtimeArgs": []
}
}
}
验证显卡驱动是否安装成功,正常输出显示类似如下:
root@Master:~# nvidia-smi
+-----------------------------------------------------------------------------------------+
| NVIDIA-SMI 565.57.01 Driver Version: 565.57.01 CUDA Version: 12.7 |
|-----------------------------------------+------------------------+----------------------+
| 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 GTX 1060 6GB On | 00000000:01:00.0 Off | N/A |
| 0% 28C P8 11W / 120W | 0MiB / 6144MiB | 0% Default |
| | | N/A |
+-----------------------------------------+------------------------+----------------------+
+-----------------------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=========================================================================================|
| No running processes found |
+-----------------------------------------------------------------------------------------+
最常见的错误就是创建容器时报错Unknown runtime specified nvidia,查看日志显示“/run/s6/basedir/scripts/rc.init: 76: --runtime=nvidia: not found”,很可能就是上面的插件没有生效的缘故。
root@Master:~# nvidia-container-runtime --version
NVIDIA Container Runtime version 1.17.2
commit: fa66e4cd562804509055e44a88f666673e6d27c0
spec: 1.2.0
runc version 1.1.4
commit: v1.1.4-0-g5fd4c4d1
spec: 1.0.2-dev
go: go1.18.7
libseccomp: 2.5.1
验证 Docker 是否正确识别 NVIDIA 运行时
首先确保 Docker 版本在 19.03 及以上
使用如下命令,输出包含 nvidia 就表示已经正确识别了。
docker info | grep Runtimes
Runtimes: runc io.containerd.runc.v2 io.containerd.runtime.v1.linux nvidia
容器配置
额外参数:--runtime=nvidia
配置变量:
NVIDIA_VISIBLE_DEVICES=GPU-ab310170-83ae-ea64-7866-40310ee3e921(这是指定某个显卡ID,也可以直接填all)
NVIDIA_DRIVER_CAPABILITIES=all
Docker 19.03 之后,--runtime=nvidia 被 --gpus 取代,所以额外参数也可以尝试使用 --gpus all
媒体服务器转码配置
当前使用的显卡是 RTX3050,H.265 视频转码播放的时候会出现突然卡住的情况(俗称断流),不转码直接播放是正常的,可排除视频问题。通过查询日志得到报错信息:
tail -50 /mnt/cache/appdata/Server/logs/ffmpeg-transcode-260e412d-61ec-45f9-83c9-422b697d01fb_1.txt
19:31:24.524 ffmpeg version 5.1-emby_2023_06_25 Copyright (c) 2000-2022 the FFmpeg developers and softworkz for Emby LLC
19:31:24.524 built with gcc 10.3.0 (crosstool-NG 1.25.0)
19:31:24.524 Execution Date: 2025-10-27 19:31:24
19:31:24.932 Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '/data/media/all/动漫/航海王 (1999)/Season 22/航海王.One Piece.1999 - S22E1146.mp4':
19:31:24.932 Metadata:
19:31:24.932 major_brand : isom
19:31:24.932 minor_version : 512
19:31:24.932 compatible_brands: isomiso2mp41
19:31:24.932 date : 2025-10-19T23:44:59.8436238+08:00
19:31:24.932 encoder : Lavf60.16.100
19:31:24.932 Duration: 00:23:35.93, start: 0.000000, bitrate: 4481 kb/s
19:31:24.932 Stream #0:0[0x1](und): Video: hevc (Main) (hev1 / 0x31766568), yuv420p(tv), 3840x2160, 4285 kb/s, Level 150, 23.98 fps, 23.98 tbr, 90k tbn (default)
19:31:24.932 Metadata:
19:31:24.932 handler_name : VideoHandler
19:31:24.932 vendor_id : [0][0][0][0]
19:31:24.932 Stream #0:1[0x2](und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 189 kb/s (default)
19:31:24.932 Metadata:
19:31:24.932 handler_name : SoundHandler
19:31:24.932 vendor_id : [0][0][0][0]
19:31:24.933 Stream mapping:
19:31:24.933 Stream #0:0 (hevc) -> scale_cuda:default (graph 0)
19:31:24.933 setsar:default (graph 0) -> Stream #0:0 (h264_nvenc)
19:31:24.933 Stream #0:1 -> #0:1 (aac (native) -> mp3 (libmp3lame))
19:31:24.933 Press [q] to stop, [?] for help
19:31:25.152 Output #0, segment, to '/config/transcoding-temp/B9E175/B9E175_%d.ts':
19:31:25.152 Metadata:
19:31:25.152 encoder : Lavf59.27.100
19:31:25.152 Stream #0:0: Video: h264 (High), cuda(tv, progressive), 1920x1080 [SAR 1:1 DAR 16:9], q=2-31, 6427 kb/s, 23.98 fps, 90k tbn
19:31:25.152 Metadata:
19:31:25.152 encoder : Lavc59.37.100 h264_nvenc
19:31:25.152 Side data:
19:31:25.152 cpb: bitrate max/min/avg: 6427604/0/6427604 buffer size: 12855208 vbv_delay: N/A
19:31:25.152 Stream #0:1: Audio: mp3, 44100 Hz, stereo, fltp, 189 kb/s (default)
19:31:25.152 Metadata:
19:31:25.152 encoder : Lavc59.37.100 libmp3lame
19:31:25.153 elapsed=00:00:00.17 frame= 1 fps=0.0 q=0.0 size=N/A time=00:00:00.00 bitrate=N/A throttle=off speed= 0x
19:31:25.390 Impossible to convert between the formats supported by the filter 'setsar@f2' and the filter 'auto_scale_0'
19:31:25.391 Error reinitializing filters!
19:31:25.391 Failed to inject frame into filter network: Function not implemented
19:31:25.391 Error while processing the decoded data for stream #0:0
19:31:25.419 [libmp3lame @ 0x1067c80] 3 frames left in the queue on closing
19:31:25.460 Conversion failed!
19:31:25.460 EXIT
根本原因是 GPU 硬解转码不支持当前 HEVC 视频的 SAR/color space 转换 → 转码失败 → 播放卡住。NVDEC 本身只做解码,很多滤镜(如 setsar、缩放、色彩空间转换)仍在 CPU 上完成,CUVID 支持在 GPU 上完成 解码 + 滤镜 + 转码,兼容性更好。
解码方式说明
| 模块 | 全称 | 作用 | 特点 |
|---|---|---|---|
| NVDEC | NVIDIA Video Decoder | 专用硬件解码引擎 | 轻量、低功耗、高速,但某些新格式容错差 |
| CUVID | CUDA Video Decoder | 通过 CUDA 调用解码(软件层封装) | 更兼容,能解决部分滤镜/色度转换问题 |
| NVENC | NVIDIA Encoder | 硬件编码器 | 用于视频转码输出(H.264/H.265) |
解决办法
在转码设置上,将 H.265 的解码设置(MPEG2/VC-1也建议)优先使用 CUVID 次选 NVDEC 然后点击保存即可。


评论区