You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何Docker容器仅显示部分挂载点,unshare创建的命名空间可见全量挂载

Docker与unshare挂载信息可见性差异的底层原理
  • unshare命令未创建独立mount namespace
    你执行的unshare --pid --fork --mount-proc /bin/bash命令仅新增了PID namespace,没有添加--mount(或-m)参数,所以新启动的bash进程仍然和宿主机共享同一个mount namespace,自然可以看到宿主机所有挂载信息。其中--mount-proc参数的作用仅为新的PID namespace挂载对应的/proc文件系统,不会触发mount namespace的创建。

  • mount namespace默认行为与Docker的定制化隔离逻辑不同
    就算你添加--mount参数为unshare创建独立的mount namespace,其默认行为也是完整复制父namespace(宿主机)的所有挂载条目,不会主动删除任何挂载信息,你依然能看到所有宿主机挂载。
    而Docker创建容器时会对mount namespace做大量专属的隔离处理:

    1. 执行pivot_root系统调用,将容器的根目录替换为镜像对应的rootfs(示例中为ubuntu镜像的文件系统),原宿主机的根目录会被移出容器的文件树
    2. 主动卸载所有容器不需要的宿主机挂载点,比如宿主机的/boot、/run/user、/var/lib/docker相关的overlay挂载等,仅保留容器运行必须的挂载:比如overlay根文件系统、/dev的tmpfs、cgroup挂载、/etc/hosts等绑定挂载
    3. 将容器内挂载的传播属性设置为private,既避免容器内的挂载操作同步到宿主机,也不会继承宿主机后续新增的挂载

内容的提问来源于stack exchange,提问作者django

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 07:42:02