clouddrive2 中文文档 下载 App

容器挂载看不见时的共享传播排查

症状先对号

这三条基本都指向同一件事:挂载传播(propagation)没配对。FUSE 在容器里建的挂载,只有目录传播属性是 shared 才能穿透到宿主机;否则容器内一切正常、外面纹丝不动。

第一步:查当前状态

把路径换成你给容器用的那个目录:

findmnt -o TARGET,PROPAGATION /path/to/dir

看 PROPAGATION 列是不是 shared。精简系统没有 findmnt 时,直接翻 /proc:

grep ' / ' /proc/self/mountinfo

输出里带 shared: 就是开的。LibreELEC、CoreELEC、飞牛 fnOS 这类系统默认已开,查一眼确认,别白改。

第二步:没开就开(两种方式二选一)

方式一:Docker 以 systemd 服务运行——给 Docker 服务启用 MountFlags:

sudo mkdir -p /etc/systemd/system/docker.service.d/
sudo tee /etc/systemd/system/docker.service.d/clear_mount_propagation_flags.conf <<EOF
[Service]
MountFlags=shared
EOF
sudo systemctl restart docker.service

方式二:Docker 不由 systemd 管理——在宿主机上直接把目标目录所在的挂载点设为共享:

sudo mount --make-shared $(df -P /path/to/dir | tail -1 | awk '{ print $6 }')

重启后失效怎么办

方式二的 mount --make-shared 只对当前运行的系统生效,重启宿主机就还原。需要持久就把这条命令写进系统启动项(rc.local、crontab 的 @reboot、或发行版的启动脚本机制均可)。

媒体库容器的连带问题

Emby/Jellyfin 容器看不到挂载,还有另一层原因:挂载发生在容器启动之后,默认传播模式会隐藏晚到的挂载。解法是给媒体库容器的卷映射加 rslave,做法见容器媒体库看不见挂载盘的 rslave 解法。

排查完记得回头核对 Compose 模板里三个不能省的配置——见用 Docker Compose 部署云盘挂载容器的配置模板。