利用 Portainer 实现 Docker 端 Jellyfin 硬件解码
原理及环境检测 随着版本的不断迭代,Jellyfin 已经逐渐超过 Plex 和自家兄弟 Emby,成为用户数量最所的个人媒体管理方案,这不仅因为它的所有功能均为免费,更是因为它的源代码完全开源,具有极高的维护与拓展空间。 不论用于运行 Jellyfin 的具体是哪款操作系统,只要该系统是基于 Linux,我们就可以通过 Docker 容器来实现极为简单且方式一致的部署。但相比于原生套件,Docker 有一个显而易见的缺点,即无法直接调用各类系统资源,核显驱动就是其中之一。 要让 Jellyfin 的 Docker 容器实时调用核显驱动(也就是人们常说的开启硬解),要满足两个条件: 拥有支持视频解码的核心显卡,且核心显卡的驱动程序运行正常; 将核显驱动直通给 Docker 容器,并赋予 Docker 容器调用该驱动的权限。 对于系统是否满足上述第一个条件,可以通过以下方式进行检验:首先用 ssh 工具连接到服务器,确保登陆 ssh 的账户拥有系统管理权限,再输入以下命令: ls /dev/dri 如果返回的结果为 card0 renderD128 ,那么恭喜,核显驱动运行正常,硬件系统满足视频解码的基本条件。接下来便是将 renderD128 这个核显驱动直通给 Docker 容器的方法。 为什么必须用 Portainer? 无论是群辉、威联通还是 Unraid,市场上绝大多数 NAS 系统都提供了图形化的 Docker 容器管理工具。但无论上述哪一个,都不支持核显驱动的直通功能。群辉的 Docker 套件无法编辑容器的系统资源参数,威联通的 Container Station 干脆无法编辑已经创建好的容器。 这里所说的“直通”,其实是将 /dev/dri/renderD128 这个驱动文件映射到 Docker 容器的相同位置。这一点利用命令行可以非常轻松地实现,即在 Jellyfin 容器的拉取命令中加入下列参数: --device=/dev/dri/renderD128 \ 因此,要快速拉取并创建一个开启硬件解码的 Jellyfin 容器,只要在 NAS 的命令行界面输入以下命令即可: sudo docker run -d --name jellyfin \ -v /share/Container/Jellyfin/config:/config \ #冒号左边为存放配置文件的目录 -v /share/Container/Jellyfin/cache:/cache \ #冒号左边为存放媒体缓存的目录 -v /share/Media/:/media \ #冒号左边为存放电影文件的目录 -p 8096:8096 \ #web界面访问端口(http) -p 8920:8920 \ #web界面访问端口(https) --device=/dev/dri/renderD128 \ #映射核显驱动 --restart=always \ #重启策略 jellyfin/jellyfin 但对许多轻度用户来说,命令行不仅不便理解,也断绝了后续对容器进行修改和自定义的空间。因此对于绝大多数日常用户来说,我个人强烈推荐使用 Portainer。它本身也是一个运行在 Docker 容器里的程序,但它拥有强大的 Docker 管理功能,是目前市面上功能最完善的网页端 Docker 容器管理界面。 ...