本文使用 LinuxServer 镜像部署 Jellyfin,并说明持久化、转码缓存、IPv6 与插件配置。镜像启动后还需按实际媒体、设备与网络条件验证播放。
官方 jellyfin/jellyfin、LinuxServer 和其他社区镜像都可能支持硬件转码。应根据其维护状态、目录约定、设备权限和更新说明选择,不能把第三方镜像统称为“更稳定”或“只有它支持 Intel Arc”。不同镜像的持久化目录并不完全相同,更换镜像前先备份配置和数据库,查明迁移兼容性。Jellyfin 容器说明
一、安装 Jellyfin
下面在 Linux Docker Engine 上使用 LinuxServer 镜像。将路径、UID/GID 替换为实际值,并提前创建目录,确保 1000 对应的用户能写配置目录、读媒体目录。正式维护时记录镜像版本或摘要;latest 会随发布变化,容器重启本身不会拉取新镜像。
docker run -d \
--name jellyfin \
-p 8096:8096/tcp \
-e PUID=1000 \
-e PGID=1000 \
-e TZ=Asia/Shanghai \
-v /srv/jellyfin/config:/config \
-v /srv/media:/data:ro \
--restart=unless-stopped \
lscr.io/linuxserver/jellyfin:latest
访问 http://服务器地址:8096 完成初始化,只开放给需要访问的网络。默认把媒体目录设为只读;若要让 Jellyfin 写 NFO、图片或删除媒体,再明确授予所需目录写权限。PUID/PGID 不是必须填 0,使用 root 也不能替代正确的共享目录权限。
Intel 硬件转码按核显与 LXC 配置检查,在创建容器时按需加入 render 设备;LinuxServer 的 OpenCL 模块仅在需要相应色调映射时添加:
--device=/dev/dri/renderD128:/dev/dri/renderD128
-e DOCKER_MODS="linuxserver/mods:jellyfin-opencl-intel"
它们是追加到 docker run 的参数,不是单独执行的命令。LinuxServer 配置文档
转码目录与 tmpfs
优先使用足够大的持久化 SSD 目录,并在后台确认“转码临时目录”的实际位置。LinuxServer 通常把运行数据放在 /config 中;官方镜像的 /cache 约定不能直接套用。
需要减少临时磁盘写入、且确有足够内存时,可以只把转码目录设为 /transcodes,追加一个有上限的 tmpfs:
--tmpfs /transcodes:rw,size=2g,mode=1777
然后在 Jellyfin 后台把转码路径设为 /transcodes。2 GiB 只是容量示例;长视频、高码率和多人并发可能迅速用满。tmpfs 占用内存并受容器内存限制,也可能被换出到 swap,不能保证提升性能或完全避免磁盘写入。不要把配置、数据库或整个缓存目录当作无条件可丢弃数据来覆盖。
Docker Compose 也能配置 tmpfs,Portainer Stack 可以提交相应 Compose 文件,无需只依赖 docker run。Docker tmpfs 文档
二、插件与中文元数据
先在媒体库设置语言、地区以及元数据提供者顺序,再按需要安装插件。TMDb 支持中文,但“官方库只有 TMDb 支持中文”缺乏依据;字幕提供者与影视元数据提供者也不是同一类功能。插件越多,越可能增加网络请求、重复结果和兼容问题。
官方稳定插件仓库:
https://repo.jellyfin.org/files/plugin/manifest.json
Metashark、MeiamSubtitles、Bangumi 和 MetaTube 均属于第三方项目。添加前应查看其当前发行说明是否支持自己运行的 Jellyfin 版本、所用数据源是否仍可访问,以及是否需要独立后端;不能仅凭仓库存在就判断当前版本兼容。
MetaTube 主要面向特定成人影片元数据场景,应按媒体库类型选择。插件具有服务端代码执行能力,只安装可信维护者的发行包,升级 Jellyfin 前检查插件兼容性。现有离线 NFO/图片也可以作为本地元数据来源,并不需要为每个库叠加网络刮削插件。Jellyfin 插件文档
三、IPv6
Jellyfin 的监听设置、Docker 网络、宿主机路由和防火墙是不同层。host 网络不是 IPv6 的唯一方案,也不能补出宿主机没有的 IPv6 连通性。 Linux 上可以使用 host 网络简化地址与 DLNA 等发现协议,也可以按 Docker 文档启用 IPv6 bridge 网络。host 模式不再使用 -p 端口映射,并需单独核对所有监听地址和防火墙。Docker IPv6 文档
在 Jellyfin 联网设置中按需开启 IPv6,再分别测试服务监听和容器出站。若镜像自带 curl,可用:
docker exec jellyfin curl -6 --fail --max-time 15 https://jellyfin.org/
# 从有 IPv6 的客户端测试实际服务器地址,IPv6 字面地址必须带方括号
curl --fail --max-time 15 'http://[服务器IPv6地址]:8096/health'
前者检查特定网站的 IPv6 出站,后者检查 HTTP 入站;任一失败都需要继续看 DNS、路由、证书或防火墙,不能只根据一次外部“查 IP”结果判断全部功能。Jellyfin 联网说明
四、中文字体显示成方块

先区分网页字体、客户端字幕字体与服务器烧录字幕缺字。服务器烧录字幕可把可信的 CJK 字体目录只读挂入镜像,或使用 LinuxServer 的通用包安装模块。
如果同时需要 OpenCL 和字体包,DOCKER_MODS 只能保留一个环境变量,以竖线连接模块,不能写两次让后者覆盖前者:
-e DOCKER_MODS="linuxserver/mods:jellyfin-opencl-intel|linuxserver/mods:universal-package-install"
-e INSTALL_PACKAGES=fonts-noto-cjk-extra
包名与模块支持的发行版需按当前镜像检查。自定义字体挂载方式见官方容器文档;安装后再测试一段需要烧录中文字幕的转码,而不是仅检查字体目录存在。
五、媒体库扫描
首次扫描耗时取决于文件数量、目录延迟、NFO/图片大小、网络刮削、插件和数据库负载。针对 10.8.9/10.8.13 的问题反馈只能说明对应版本与环境,不能据此断言当前版仍未修复,也不能把数据库争用当作每个慢扫描的确定原因。
先记录运行版本、扫描任务与日志,在关闭不必要插件或减少一个媒体库后对比;网络挂载还应核对缓存是否更新、远端目录是否可访问。大库把扫描安排在低负载时段,保留当前官方问题跟踪链接用于诊断。Jellyfin 问题跟踪
远端 NFS/SMB/WebDAV 的修改不一定在本机产生 inotify 事件,可使用计划扫描或轮询与 API 触发方案。
评论区