Emby Docker 容器部署 — 一条命令跑起来,灵活又干净
Docker 方式的优势
在所有部署方式中,Docker 是最灵活的一种:
- 版本可控:想升就升,想回退就回退,pull 另一个 tag 就行
- 环境隔离:Emby 的所有依赖(ffmpeg、元数据工具等)都打包在镜像里,不污染宿主机
- 备份简单:备份就是把 config 这个 volume 拷走
- 迁移方便:新机器上拉起同样的
docker run命令,挂载老的 config 目录,瞬间恢复 - 跨平台:x86 NAS、ARM NAS(群晖 DS923+、威联通 TS-464C 等)、树莓派 4 都能用
前置条件
宿主机上安装好 Docker Engine(Linux 原生、群晖 Container Manager、威联通 Container Station、TrueNAS Scale 等都自带或一键装好)。在宿主机终端执行 docker --version 能看到版本号就说明装好了。
x64 架构服务器(最常见)
一条命令搞定:
docker run -d \
--name emby \
--restart unless-stopped \
--net=host \
-e UID=1000 \
-e GID=1000 \
-e GIDLIST=1000 \
-e TZ=Asia/Shanghai \
-v /home/user/emby/config:/config \
-v /home/user/Movies:/data/movies \
-v /home/user/TVShows:/data/tvshows \
-v /home/user/Music:/data/music \
-v /home/user/Photos:/data/photos \
emby/embyserver:latest
逐参数解释:
| 参数 | 说明 | 为什么要这样 |
|---|---|---|
-d | 后台运行容器 | Emby Server 需要常驻 |
--name emby | 给容器起名 | 方便后续 docker stop/start emby |
--restart unless-stopped | 宿主机重启后自动拉起 | 确保 24x7 运行 |
--net=host | 用宿主机网络 | 硬件转码必需。如果不用 --net=host,需要手动映射端口 -p 8096:8096 -p 8920:8920 |
-e UID/GID | Emby 进程在容器内以哪个宿主身份运行 | 确保能读到挂载的媒体文件,避免权限问题 |
-e TZ | 时区 | 影响 Guide Data 和日志时间 |
-v 左边:右边 | 卷挂载 | 左边是宿主机路径,右边是容器内路径 |
添加硬件转码设备
如果宿主机有 Intel 核显,需要把 /dev/dri/ 透传进容器:
docker run -d \
--name emby \
--restart unless-stopped \
--net=host \
--device=/dev/dri/renderD128 \
--device=/dev/dri/card0 \
-e UID=1000 \
-e GID=1000 \
-e TZ=Asia/Shanghai \
-v /home/user/emby/config:/config \
-v /home/user/Movies:/data/movies \
emby/embyserver:latest
NVIDIA 独显需要加 --runtime=nvidia(需要先装 nvidia-docker)。AMD 显卡用同样的 /dev/dri/ 透传方式。
ARM 架构(树莓派、ARM NAS)
用 ARM 专用镜像:
# ARM64(树莓派 4、群晖 DS923+ 等)
docker run -d \
--name emby \
--restart unless-stopped \
--net=host \
-e UID=1000 \
-e GID=1000 \
-e TZ=Asia/Shanghai \
-v /home/user/emby/config:/config \
-v /home/user/Movies:/data/movies \
emby/embyserver_arm64v8:latest
# ARMv7(老款树莓派 3、ARMv7 NAS)
# 把镜像名换成 emby/embyserver_arm32v7:latest
docker-compose 方式
更推荐把上面的配置写成 docker-compose.yml,方便维护和升级:
services:
emby:
image: emby/embyserver:latest
container_name: emby
restart: unless-stopped
network_mode: host
devices:
- /dev/dri/renderD128:/dev/dri/renderD128
- /dev/dri/card0:/dev/dri/card0
environment:
- UID=1000
- GID=1000
- TZ=Asia/Shanghai
volumes:
- /home/user/emby/config:/config
- /home/user/Movies:/data/movies
- /home/user/TVShows:/data/tvshows
- /home/user/Music:/data/music
启动:docker compose up -d停止:docker compose down升级:docker compose pull && docker compose up -d
容器管理常用命令
# 查看容器状态
docker ps | grep emby
# 查看实时日志(排查问题时用)
docker logs -f emby
# 停止/启动/重启
docker stop emby && docker start emby
docker restart emby
# 升级到最新版
docker pull emby/embyserver:latest
docker stop emby && docker rm emby
docker run -d --name emby ... # 同上的完整命令
# 备份 Emby 配置(在容器跑着的时候也能拷)
cp -r /home/user/emby/config ./emby-backup-$(date +%Y%m%d)
常见问题
容器启动了但浏览器打不开
检查 docker ps 看容器是不是在运行(STATUS 显示 Up)。如果用了 --net=host,直接访问宿主机 IP:8096。如果没加 --net=host,检查端口映射是否正确。
权限错误,Emby 扫不到媒体文件
PUID/GID 填错了。用 id 用户名 查一下宿主机上实际能读媒体目录的那个用户的 uid 和 gid,改了之后重建容器。
硬件转码用不了
确认加了 --device=/dev/dri/... 透传;确认宿主机核显驱动装好了(Intel 核显需要 intel-media-va-driver);进入 Emby Server Dashboard → Transcoding 页面,硬件解码器选 Quick Sync 或 Auto。
升级后配置丢失
肯定是卷挂载路径写错了,升级时用到了新的空 config 目录。检查 docker run 或 docker-compose.yml 里 -v 左边的宿主机路径是不是你之前用的那个。升级前养成习惯先备份 config 目录。