github编辑

挂载主机目录

什么是 Bind Mount

Bind Mount(绑定挂载)将宿主机的目录或文件直接挂载到容器中。容器可以读写宿主机的文件系统。

宿主机                           容器
┌─────────────────────┐         ┌─────────────────────┐
│  /home/user/code/   │         │                     │
│  ├── index.html     │◄───────►│  /usr/share/nginx/  │
│  ├── style.css      │ Bind    │  html/              │
│  └── app.js         │ Mount   │  (同一份文件)        │
└─────────────────────┘         └─────────────────────┘

Bind Mount vs Volume

特性
Bind Mount
Volume

数据位置

宿主机任意路径

Docker 管理的目录

路径指定

必须是绝对路径

卷名

可移植性

依赖宿主机路径

更好(Docker 管理)

性能

依赖宿主机文件系统

优化的存储驱动

适用场景

开发环境、配置文件

生产数据持久化

备份

直接访问文件

需要通过 Docker

选择建议


基本语法

使用 --mount(推荐)

使用 -v(简写)

两种语法对比

特性
--mount
-v

语法

键值对,更清晰

冒号分隔,更简洁

路径不存在时

报错

自动创建目录

推荐程度

✅ 推荐

常用


使用场景

场景一:开发环境代码同步

场景二:配置文件挂载

场景三:日志收集

场景四:共享 SSH 密钥


只读挂载

防止容器修改宿主机文件:

容器内尝试写入会报错:


挂载单个文件

⚠️ 注意:挂载单个文件时,如果宿主机上的文件被编辑器替换(而非原地修改),容器内仍是旧文件的 inode。建议重启容器或挂载目录。


查看挂载信息

输出:

字段
说明

Type

挂载类型(bind)

Source

宿主机路径

Destination

容器内路径

RW

是否可读写

Propagation

挂载传播模式


常见问题

Q: 路径不存在报错

解决:确保源路径存在,或改用 -v(会自动创建)

Q: 权限问题

容器内用户可能无权访问挂载的文件:

Q: macOS/Windows 性能问题

在 Docker Desktop 上,Bind Mount 性能较差(需要跨文件系统同步):

选项
说明

:cached

宿主机权威,容器读取可能延迟

:delegated

容器权威,宿主机读取可能延迟

:consistent

默认,完全一致(最慢)


最佳实践

1. 开发环境使用 Bind Mount

2. 生产环境使用 Volume

3. 配置文件使用只读挂载

4. 注意路径安全


本章小结

要点
说明

作用

将宿主机目录挂载到容器

语法

-v /宿主机:/容器--mount type=bind,...

只读

添加 readonly:ro

适用场景

开发环境、配置文件、日志

vs Volume

Bind 更灵活,Volume 更适合生产

延伸阅读

最后更新于