propagation字段直接反映挂载传播行为,常见值包括rprivate(默认,仅容器内可见)、private(子进程可见)、rshared(双向同步至其他rshared/shared挂载点)、shared(主机与容器完全双向传播,需主机支持)。
直接看 mounts 字段里的 propagation 值,就能确认挂载点的传播行为——它决定了挂载事件是否、以及如何在主机和其他容器间同步。
Propagation 字段的四种常见取值及含义
该字段出现在 docker inspect 输出的每个挂载项中,是理解数据共享边界的关键:
- rprivate:默认值。挂载仅对当前容器可见,主机和其他容器均不可见,且任何后续挂载/卸载操作都不会传播出去
-
private:比 rprivate 多一层“子挂载可见性”,即当前容器内新建的挂载(如
mount --bind)对其子进程可见,但依然不向主机或其他容器传播 -
rshared:双向传播——当前容器的挂载/卸载会同步到其他设置了
rshared或shared的挂载点,但不会传回主机 -
shared:完全双向传播,包括主机。例如在容器内
mount /tmp/data,主机上也会立即出现对应挂载;反之亦然。需谨慎使用,存在安全与稳定性风险
如何精准提取并验证传播属性
避免翻阅冗长 JSON,用 --format 直接定位:
- 查看所有挂载的传播方式:
docker inspect -f '{{json .Mounts}}' mycontainer | jq '.[].Propagation' - 只显示绑定挂载(
Type: bind)的传播属性:docker inspect -f '{{range .Mounts}}{{if eq .Type "bind"}}{{.Destination}} → {{.Propagation}}{{"\n"}}{{end}}{{end}}' mycontainer - 配合
findmnt在主机侧交叉验证(适用于 Linux):findmnt -o SOURCE,TARGET,FSTYPE,PROPAGATION | grep "/path/on/host"
传播属性实际影响的典型场景
它不是纯理论参数,在以下情况会直接影响行为:
- 多个容器共用同一主机目录时,若都设为
shared,一个容器里umount会导致其他容器丢失该路径访问能力 - Docker Compose 默认使用
rprivate,所以即使你映射了/var/run/docker.sock,容器内执行docker run启动的新容器,其挂载也不会自动出现在原容器中 - 调试容器内
/proc/mounts与主机不一致时,首先要核对Propagation是否限制了可见范围
修改传播属性的方法与限制
该属性由启动容器时指定,运行中无法更改:
- 绑定挂载时显式设置:
docker run -v /host/path:/container/path:shared nginx(支持shared、rshared、slave、rslave、private、rprivate) - Compose 中写法:
volumes: - /host:/cont:shared - 注意:
shared和rshared要求主机文件系统挂载时已启用shared选项(如mount --make-shared /),否则容器启动会失败











