容器媒体库看不见挂载盘的 rslave 解法
症状
- 挂载服务跑得好好的,宿主机上也能看到挂载盘
- 但 Emby / Jellyfin 容器里的媒体路径是空的,扫不到任何文件
- 奇怪的是:容器先启动、挂载后出现时必现;重启容器有时又好了
原因一句话
Docker 卷映射的默认传播模式只反映容器启动当时的挂载状态。挂载服务的 FUSE 挂载出现在容器启动之后,默认模式就把这个晚到的挂载藏起来了——这是 Docker 的传播语义,不是谁的 bug。
解法:卷映射加 rslave
给媒体库容器里映射挂载目录的那个卷,尾部加上 :rslave:
services:
emby:
image: emby/embyserver
volumes:
- /CloudNAS:/CloudNAS:rslave # 关键就是这一处的尾部标记
- ./config:/config
CLI 写法同理:-v /CloudNAS:/CloudNAS:rslave。改完重建容器(compose down 再 up,或删掉重建),改参数对已运行的容器不生效。
前提别忘了
rslave 解决的是「晚到的挂载对容器可见」,它有个前提:宿主机上那个目录本身要先能看到挂载。宿主机看不见的,先回去处理传播属性——见容器挂载看不见时的共享传播排查。两层排查的顺序:
- 宿主机目录里有没有挂载 → 没有就是传播没配 shared
- 宿主机有、容器里没有 → 给媒体库容器加 rslave
顺带的容器实践
- 转码别开:网盘直读已经是流式,再转码纯属浪费 CPU(社区教程反复强调的一条)。
- 路径保持一致:容器内外路径一一对应,软链与 strm 方案里同样适用,见网盘加软链与 strm 的进阶媒体方案。
- 多卷分开放:直链网盘与 WebDAV 中转网盘(夸克等)的挂载目录分开映射,避免混目录播放异常,背景见夸克网盘经 WebDAV 中转接入的套娃方案。
改完重建后,媒体库正常扫库的验收方式:Emby 控制台里看到文件数、手动触发一次扫描、随便点开一部片确认能拖进度条。