--mount 是什么
--mount 用 key=value 的形式显式描述一次挂载:类型是什么、源在哪、挂到容器的哪个路径、是否只读。相比 -v 的冒号拼接写法,它把每个要素都写在明面上,源不存在时的行为也更严格——绑定挂载的源目录不存在会直接报错,而 -v 会悄悄创建一个空目录,让问题延后到运行时才暴露。
基本信息
| 语法 | --mount type=volume,source=卷名,target=容器路径[,readonly] |
|---|---|
| 可用类型 | volume(命名卷)、bind(宿主目录)、tmpfs(内存文件系统) |
| bind 要求 | 源目录必须已存在,否则直接报错 |
| tmpfs 参数 | 可加 tmpfs-size=64m 限制大小,数据不落盘 |
| 多选项写法 | 同一参数内用逗号分隔,不要用空格 |
| 与 -v 关系 | 两者可共存,但在一条命令里混用会降低可读性 |
典型使用场景
- 编排脚本里挂载路径由变量拼接,结构化写法更不容易出错
- 需要只读挂载配置目录,避免容器内进程改动配置
- 需要临时内存目录:把缓存或临时文件放在 tmpfs 上,不落盘
- 排查挂载问题时借助更明确的报错快速定位路径错误
- 迁移到 Compose 的 volumes 长格式:两边写法一致,理解成本低
三种类型示例
三种类型示例
# 命名卷:源不存在时自动创建卷
docker run -d --mount type=volume,source=pgdata,target=/var/lib/postgresql/data postgres:16-alpine
# 绑定挂载并只读:源目录必须已存在,路径写错会直接报错
docker run -d --mount type=bind,source=/srv/www,target=/usr/share/nginx/html,readonly nginx:1.27-alpine
# 内存文件系统:限制 64M,容器重启数据即消失
docker run --rm --mount type=tmpfs,target=/tmp,tmpfs-size=64m alpine df -h /tmp
# 核对容器实际挂载情况
docker inspect -f '{{json .Mounts}}' web类型与行为对照
| 类型 | 源写法 | 数据位置与特点 |
|---|---|---|
| volume | source=卷名(可省略自动生成) | Docker 管理,容器删除后仍在 |
| bind | source=宿主绝对路径 | 宿主目录,源必须已存在 |
| tmpfs | 无 source | 内存中,容器停止即丢失 |
| readonly 修饰 | 附加在任意类型后 | 容器内不可写,适合配置注入 |
| tmpfs-size | 附加参数 | 限制内存占用,防止无限增长 |
脚本与配置模板里推荐 --mount:字段名明确、错误提示直接,排查时不必再猜冒号两边哪个是宿主路径、哪个是容器路径。
tmpfs 里的内容不写盘,容器重启即清空,适合缓存与临时文件;把需要持久化的数据放进去等于每次重启都重置。