联合挂载点由lowerdir(只读镜像层)、upperdir(可写容器层)和merged(统一视图)三层组成,通过overlay2等驱动动态合成容器根文件系统。

容器启动时的联合挂载点,本质是 Docker 利用 Linux 联合文件系统(UnionFS)把多个只读镜像层 + 一个可写层“叠”在一起,形成容器运行时看到的统一文件系统视图。
联合挂载点是怎么组成的
当你执行 docker run 启动容器,Docker 会为它创建一个由三层构成的挂载结构:
- 底层(lowerdir):只读的镜像层,来自你拉取的 base 镜像(如 ubuntu:22.04)、中间层(RUN、COPY 指令生成)和最终层,按顺序叠加;
- 上层(upperdir):容器专属的可写层,所有新增、修改、删除操作都发生在这里;
-
合并层(merged):对外暴露的统一视图,即容器内看到的根文件系统(
/),它不是真实目录,而是 kernel 通过 overlayfs 或 overlay2 驱动动态合成的结果。
挂载点与用户定义挂载的关系
联合挂载点是容器运行的基础文件系统,而你用 -v 或 --mount 添加的挂载(比如 -v /host/data:/app/data),是在这个合并层之上“再加一层”——它会覆盖 merged 目录中对应路径的内容。
MiniMax 图片理解 + 网络搜索 MCP 工具。适配 Docker 环境(极空间等),支持图片 OCR 识别、图像内容理解、网络搜索。API Key 安全存储在本地 credentials 文件,不暴露在代码中。
- 如果容器里原本有
/app/data(来自镜像),挂载后该路径就变成宿主机目录的映射,原内容不可见; - 挂载点本身不参与 UnionFS 的分层逻辑,它是独立于镜像层的直接绑定或 volume 映射;
- 也就是说:联合挂载负责“镜像怎么变出容器”,而
-v挂载负责“容器怎么连宿主机”。两者共存但职责分明。
为什么需要联合挂载
它解决了镜像复用与实例隔离的矛盾:
- 多个容器可以共享同一套只读镜像层,节省磁盘空间和内存;
- 每个容器拥有自己的 upperdir,互不干扰,写操作不会污染镜像或其他容器;
- 配合写时复制(Copy-on-Write),只有真正被修改的文件才会被复制到 upperdir,提升效率。
实际启动时发生了什么
以 docker run -v /home/conf:/etc/nginx/conf.d nginx 为例:
- Docker 先用 overlay2 把 nginx 镜像各层叠加,生成初始的 merged 文件系统;
- 再把宿主机的
/home/conf绑定挂载到 merged 中的/etc/nginx/conf.d路径,覆盖掉镜像里原有的配置目录; - 容器启动后,进程读写
/etc/nginx/conf.d,实际操作的是宿主机目录,而其他路径(如/usr/sbin/nginx)仍走 UnionFS 的只读镜像层。










