> 技术文档 > CentOS8 使用 Docker 搭建 Jellyfin 家庭影音服务器

CentOS8 使用 Docker 搭建 Jellyfin 家庭影音服务器


CentOS8 使用 Docker 搭建 Jellyfin 家庭影音服务器

一、前言

由于 Jellyfin 的 GPL 协议和 Intel 的 media-driver (iHD) Linux 驱动(部分开源)在协议上不兼容的缘故,Jellyfin 官方的 Docker 镜像:jellyfin/jellyfin 并不包含 Intel Linux 核显驱动。但是 Intel 的 QuickSync QSV 硬件加速依赖于该驱动,并且 Intel 10 代酷睿(Comet Lake)以及更新的处理器需要该驱动才能正常使用硬件加速。另外 VPP/OpenCL 色调映射也需要该驱动才能正常运作。为此,大佬 nyanmisaka 制作了一个开箱即用的Docker镜像,包含最新的驱动、jellyfin-ffmpeg、补丁、CJK 系统字体等。详情见:Jellyfin中国特供版+Docker镜像,含驱动,免折腾开箱即用。

二、创建并配置 jellyfin 容器

1. 1 docker 拉取镜像

若想拉取docker镜像,只需使用命令docker pull nyanmisaka/jellyfin:latest

CentOS8 使用 Docker 搭建 Jellyfin 家庭影音服务器

调用管理员权限,使用命令:

sudo docker image ls

查看已下载的镜像。

CentOS8 使用 Docker 搭建 Jellyfin 家庭影音服务器

可以观察到拉取镜像的信息如ID、tag和大小等。

此外,还可以通过命令:

sudo docker inspect nyanmisaka/jellyfin:latest

来进一步查看容器的详细信息:

CentOS8 使用 Docker 搭建 Jellyfin 家庭影音服务器

比如,nyanmisaka 在 2025.07.14 发布的 jellyfin 容器的哈希值为:sha256:c31464aa3c35d8a409de3ae697c605f59eba67b72455168917b6eb768dfa9e9e

通过 docker inspect 命令查看到的详细信息可以对比哈希值是否一致。根据所得信息可知,哈希值一致,拉取镜像成功。

1.2 创建容器前的准备工作

为方便长期维护以及后续容器更新的数据迁移,创建 jellyfin 容器前需要先创建用于保存配置、缓存的文件目录。由于 jellyfin 属于本服务器对外提供的服务程序,则在 /srv 目录下创建所需文件目录。

srv 目录主要用来存储本机或本服务器提供的服务或数据(用户主动生产的数据、对外提供服务)。

使用命令:

sudo mkdir -p /srv/jellyfin/{config,cache}# -p :确保目录名称存在,不存在的就建一个。

1.3 创建 jellyfin 容器

使用命令,创建 jellyfin 容器:

docker run -d --name=jellyfin \\-p 8096:8096 -p 8920:8920 \\-p 7359:7359/udp -p 1900:1900/udp \\-v /srv/jellyfin/config:/config \\-v /srv/jellyfin/cache:/cache \\-v /media:/media \\-e TZ=Asia/Shanghai \\-e PUID=0 -e PGID=0 \\--device=/dev/dri:/dev/dri \\--restart unless-stopped \\nyanmisaka/jellyfin:latest

关于上述命令中参数的详细说明,如下表所示:

参数 说明 -d 后台运行--detach 的缩写,使容器在后台运行,即便关闭终端也能保持在后台运行,不会占用当前终端。 --name=jellyfin 指定容器名称。为容器分配一个固定的名字 “jellyfin”,方便后续管理(如停止、重启、查看日志等)。 -p 8096:8096 端口映射 (HTTP)。将主机的 8096 端口映射到容器的 8096 端口,这是 jellyfin 的主 Web 访问端口。 -p 8920:8920 端口映射 (HTTPS)。映射 HTTPS 端口,如果为 jellyfin 配置了 SSL,将通过此端口访问。 -p 7359:7359/udp 端口映射 (自动发现)。映射 UDP 端口,用于局域网内的客户端自动发现 jellyfin 服务器。 -p 1900:1900/udp 端口映射 (DLNA)。映射 DLNA 服务端口,用于兼容 DLNA 的设备(如智能电视)发现和播放媒体。 -v /srv/jellyfin/config:/config 数据卷挂载 (配置)。将主机的 /srv/jellyfin/config 目录映射到容器的 /config 目录,用于持久化存储所有核心配置文件和数据库。确保数据不丢失,方便维护和后续更新。 -v /srv/jellyfin/cache:/cache 数据卷挂载 (缓存)。将主机的 /srv/jellyfin/cache 目录映射到容器的 /cache 目录,用于存放图片、转码等缓存文件。确保数据不丢失,方便维护和后续更新。 -v /media:/media 数据卷挂载 (媒体库)。将主机的 /media 目录(或你存放媒体文件的实际目录)映射到容器的 /media 目录,让 jellyfin 可以访问到电影、电视剧、音乐等文件。 -e TZ=Asia/Shanghai 设置环境变量 (时区)。将容器的系统时区设置为上海,确保日志和界面显示时间正确。 -e PUID=0 -e PGID=0 设置环境变量 (用户/组)。设置容器内 jellyfin 进程的用户ID (PUID) 和组ID (PGID) 为 0,即 root 用户。这可以最大限度地避免因文件权限问题导致的媒体库访问失败。 --device=/dev/dri:/dev/dri 设备直通 (硬件加速)。将主机的显卡设备 (/dev/dri) 直接分配给容器使用,以启用硬件转码(硬解),可以大幅降低 CPU 占用率。 --restart unless-stopped 设置重启策略。除非手动执行 docker stop,否则在 Docker 重启或宿主机开机时,容器都会自动重新启动,确保服务高可用。 nyanmisaka/jellyfin:latest 指定基础镜像。声明此容器是基于 nyanmisaka 的 nyanmisaka/jellyfin 镜像的 latest (最新) 版本来创建的。

1.4 查看 jellyfin 容器信息及安装驱动

使用命令:

sudo docker ps

查看查看当前 docker 运行的容器,确认刚刚创建的 jellyfin 容器是否成功运行。

由于我所使用的 CPU 为 AMD 14 年前发布的上古老 U: e350, 其集成了 HD6130 显卡(我想升级成 G5500T QAQ)。而 nyanmisaka 大佬的容器镜像中集成的显卡驱动并不支持我的老旧显卡,所以对于我来说还做不到真正意义上的“开箱即用”,还需要继续在容器中安装驱动程序。

接下来进入 jellyfin 容器,并在其中启动一个可交互的 Bash 终端会话:

sudo docker exec -it jellyfin /bin/bash
参数 说明 exec 在一个已经处于运行状态的容器内部执行一条新的命令 -it 两个参数 -i 和 -t 的合并写法,通常一起使用;-i 保持标准输入(STDIN)的开启状态,-t 分配一个伪终端(pseudo-TTY)。将 -it 结合在一起,就创建了一个功能完善的、可以与容器内环境进行实时交互的终端。 /bin/bash 希望在容器内部执行的具体命令。/bin/bash 是 Bash Shell 的可执行文件路径。执行它就意味着在容器内部启动一个新的 Bash 进程,从而提供一个命令提示符。

CentOS8 使用 Docker 搭建 Jellyfin 家庭影音服务器

更新容器内仓库:

apt update

直通显卡确认:

ls /dev/dir

CentOS8 使用 Docker 搭建 Jellyfin 家庭影音服务器

查看未安装驱动情况下容器内的解码支持信息:

/usr/lib/jellyfin-ffmpeg/vainfo

输出如下图所示:

CentOS8 使用 Docker 搭建 Jellyfin 家庭影音服务器

从输出信息可知,容器内识别到了 HD6130 需要 r600_drv_video.so 这个驱动,但是 r600: driver missing 指出这个显卡驱动缺失。

同时 libva info: Trying to open /usr/lib/jellyfin-ffmpeg/lib/dri/radeonsi_drv_video.so 这条信息指出由于找不到正确的 r600 驱动,系统尝试加载了 radeonsi 驱动。但 radeonsi 是为更新的 AMD 显卡设计的,与当前硬件不兼容,所以也失败了。说明当前显卡的硬件直通是成功的,但是缺少了对应的驱动文件。

这时需要安装 mesa-va-drivers 这一软件包, 其包含了 r600_drv_video.so 这一驱动。

使用如下命令安装:

apt install mesa-va-drivers

CentOS8 使用 Docker 搭建 Jellyfin 家庭影音服务器

成功安装 mesa-va-drivers 软件包后,再次使用命令:/usr/lib/jellyfin-ffmpeg/vainfo 等到解码支持的信息:

CentOS8 使用 Docker 搭建 Jellyfin 家庭影音服务器

发现现在可以采用 VAAPI 驱动进行硬件加速,但是只能支持 H264, MPEG2, VC1 这三种编码格式,现代主流的编码格式基本都不支持(再一次想换 G5500T QAQ)。详细 jellyfin 中的硬件解码支持如下表所示:

格式 硬件解码支持 备注 H264 ✅ 最常见的视频编码格式,覆盖绝大多数1080p及以下的视频。 HEVC (H.265) ❌ 一种高效的现代的视频压缩标准,也被称为 H.265 或 MPEG-H Part 2 MPEG2 ✅ 主要用于DVD和一些较老的数字电视录像。 VC1 ✅ 用于部分蓝光碟和Windows Media视频。 VP8 ❌ 一种较早的网页视频格式。 VP9 ❌ 主流的网页视频格式。 AV1 ❌ 最新的高效视频格式,需要新硬件才能支持硬解。 HEVC 10bit ❌ HEVC本身就不支持,其10-bit版本更不支持。转码 HDR 视频只能通过 CPU 软解 VP9 10bit ❌ VP9本身就不支持,其10-bit版本也不支持。

确认没有问题之后便可以使用命令 exit 退出容器了。

2.1 配置防火墙

将 jellyfin 服务器所需的几个端口在防火墙上放行,使用命令:

# 添加 TCP 端口sudo firewall-cmd --permanent --zone=public --add-port=8096/tcpsudo firewall-cmd --permanent --zone=public --add-port=8920/tcp# 添加 UDP 端口sudo firewall-cmd --permanent --zone=public --add-port=7359/udpsudo firewall-cmd --permanent --zone=public --add-port=1900/udp# 重新加载防火墙使其生效sudo firewall-cmd --reload# 查看端口是否放行sudo firewall-cmd --list-ports

2.2 配置 jellyfin

本文中 jellyfin 容器的 http 端口被映射到本地端口的 8096, 所以通过 IP:8096 即可访问到 jellyfin 的 web端。

按照引导提示完成基本配置后,进入 控制台

CentOS8 使用 Docker 搭建 Jellyfin 家庭影音服务器

2.2.1 媒体库设置

媒体库 一栏中添加并管理媒体库。其中更多设置可按需开启或关闭。

CentOS8 使用 Docker 搭建 Jellyfin 家庭影音服务器

CentOS8 使用 Docker 搭建 Jellyfin 家庭影音服务器

2.2.2 播放设置

CentOS8 使用 Docker 搭建 Jellyfin 家庭影音服务器

播放 一栏中选择合适的驱动,本文所采用的驱动为 VAAPI, 并且在下方硬件设备中填入容器直通的设备路径,如 /dev/dri/renderD128.

启用硬件解码 一栏中,本文中的 GPU 由于性能限制,只能选择如上图所示的三项编码格式,各位可根据自身 GPU 支持的解码格式来选择。

CentOS8 使用 Docker 搭建 Jellyfin 家庭影音服务器

勾选 启用硬件编码 ,其余设置保持默认即可。

CentOS8 使用 Docker 搭建 Jellyfin 家庭影音服务器

可按需选择是否开启。

2.2.3 网络设置

完成了媒体库和最核心的播放转码设置后,下一步就是对 Jellyfin 的网络进行配置。合理的网络配置是确保您能在各种环境下(内网、外网)稳定访问服务的关键。

在控制台的“网络”一栏中,包含了所有与连接、端口、远程访问相关的选项。

服务器地址设置

这部分主要定义了 jellyfin 服务监听的基础网络参数。

  • 本地 HTTP/HTTPS 端口号:默认为 80968920。这两个端口就是在创建 docker 容器时,通过 -p 8096:8096-p 8920:8920 参数映射到主机的端口。通常情况下,保持默认即可。只有当这两个端口与服务器上其他服务冲突时,才需要修改,并且修改后需要同步更新 docker run 命令中的端口映射。

  • 基础 URL:此选项用于反向代理的场景。例如,如果希望通过 http://example.com/jellyfin 来访问服务,那么这里就需要填入 jellyfin。对于直接使用 IP 访问的用户,留空即可。

  • 监听的本地网络地址

    • 留空(默认):Jellyfin 会监听在所有可用的网络接口上(即 0.0.0.0),这是最常用、最灵活的设置。
    • 指定 IP:如本文中填写的 192.168.1.221,jellyfin 将只会绑定到这一个具体的内网 IP 地址上。这样做可以增强一定的安全性,确保服务只在特定的网卡上暴露。但如果平时服务器 IP 地址发生变化,可能会导致服务无法访问。对于大多数家庭用户,留空即可。
  • LAN 网络:此功能用于区分“内网”和“外网”,主要目的是为了应用不同的带宽限制。

    • 工作方式:在这里填写的 IP 地址段被 jellyfin 视为“局域网(内网)”,在这些地址上访问的用户不会受到带宽限制。所有不在此列表中的地址都将被视为“广域网(外网)”,并受到设置的“外部网络带宽限制”。以本文的 192.168.1.0/255.255.255.0, 192.168.31.0/255.255.255.0 为例,它告诉 jellyfin,192.168.1.x192.168.31.x 这两个网段都属于内网。如果家庭网络比较复杂(例如有主路由和旁路由),这个设置就非常有用。如果网络结构简单,留空即可,jellyfin 会自动将服务器所在的子网视为内网。
  • 已知代理:用于高级反向代理场景。当 jellyfin 前面有多层代理时,在这里填入反向代理服务器的 IP 地址,可以帮助 Jellyfin 正确解析 X-Forwarded-For 请求头,从而获取到真实的客户端 IP 地址。对于大多数用户,此项应留空。

HTTPS 设置

如果希望通过 HTTPS 加密访问您的 Jellyfin,可以在这里配置。

  • 强制 HTTPS:一个简单的开关,开启后,所有到 8096 端口的 HTTP 请求都会被自动重定向到 8920 的 HTTPS 端口。前提是必须已经成功配置了 HTTPS。

  • 自定义 SSL 证书路径:允许直接在 Jellyfin 中配置 SSL 证书。需要提供一个 .pfx.p12 格式的证书文件。不过,更常见和推荐的做法是在反向代理层面(如 Nginx Proxy Manager, Caddy, Traefik)来处理 SSL,而不是在 jellyfin 应用本身中配置。

远程访问设置

这部分控制着在外网访问 Jellyfin 的权限。

  • 允许与此服务器进行远程连接:这是外网访问的总开关。取消勾选后,jellyfin 将只允许来自在“LAN 网络”中定义的内网 IP 的访问。
  • 开启自动端口映射 (UPnP):此功能会尝试命令路由器自动完成端口转发,免去手动登录路由器设置的麻烦。

    注意:UPnP 功能虽然方便,但在某些路由器上可能不稳定或不兼容,且从安全角度考虑,不推荐在服务器上开启此功能。最佳实践是手动在路由器上设置端口转发规则,将外网的 80968920 端口指向 jellyfin 服务器的内网 IP。

  • 已发布的服务器 URIs:当配置了域名和反向代理后,在这里填入公开访问地址。jellyfin 会在生成一些访问链接(如邮件分享)时使用这个地址,确保外部用户可以正确访问。

配置完以上所有网络选项后,根据提示,部分设置可能需要重启 jellyfin 容器才能生效。至此,jellyfin 服务器就已经根据个人的网络环境和访问需求,配置得明明白白了。

三、结语

至此,本文已经从零开始,走完了在 CentOS 8 上通过 Docker 部署 Jellyfin 的全部流程。从选择 nyanmisaka 大佬优化的特供版镜像,到创建和配置容器;从解决我这台上古硬件“开箱不即用”的驱动难题,到精细化配置防火墙、播放和网络选项,每一步都体现着“折腾至上”。

本文的经历恰好说明,即便硬件条件不甚理想(再次默念想换 G5500T QAQ),通过清晰的思路和正确的调试方法,依然能够最大限度地发挥其潜力,成功搭建起一个稳定、高效、且支持硬件加速的家庭影音服务器。这个过程不仅是对技术的探索,更是亲手“折腾”,让老旧设备重获新生的那份独特成就感。

当然,jellyfin 的玩法远不止于此。当拥有一个稳定运行的服务后,还可以进一步探索,例如:

  1. 配置反向代理:使用 Nginx Proxy Manager 或 Caddy 为 jellyfin 套上域名和 HTTPS,实现更安全、更优雅的远程访问。
  2. 自动化媒体管理:结合 Sonarr, Radarr, Bazarr 等工具,打造全自动的追剧、电影搜刮和字幕下载流程。
  3. 刮削与索引:可以使用 tmm(tiny media manager) 来实现便捷的资源刮削整理。

希望本篇教程能帮助您顺利搭建起属于自己的家庭影音中心,将收藏的珍贵影片整理得井井有条,随时随地与家人朋友分享。如果在部署过程中遇到任何问题,欢迎在评论区留言讨论。

祝观影愉快!

参考

  1. https://www.chiphell.com/thread-2375777-1-1.html.
  2. https://zhuanlan.zhihu.com/p/624670198.

版权声明: 本文为博主「张火火isgudi」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接: https://www.cnblogs.com/zbyisgudi/p/19005327