首页/云/Docker 容器速查/docker run --mount 显式挂载写法
网络与存储52 条

docker run --mount 显式挂载写法

以 key=value 形式显式声明挂载类型与源:type=bind/volume/tmpfs 一目了然,源不存在时的行为也与 -v 不同。

Docker 容器速查云更新于 2026-10-13

--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

类型与行为对照

类型源写法数据位置与特点
volumesource=卷名(可省略自动生成)Docker 管理,容器删除后仍在
bindsource=宿主绝对路径宿主目录,源必须已存在
tmpfs无 source内存中,容器停止即丢失
readonly 修饰附加在任意类型后容器内不可写,适合配置注入
tmpfs-size附加参数限制内存占用,防止无限增长
脚本与配置模板里推荐 --mount:字段名明确、错误提示直接,排查时不必再猜冒号两边哪个是宿主路径、哪个是容器路径。
tmpfs 里的内容不写盘,容器重启即清空,适合缓存与临时文件;把需要持久化的数据放进去等于每次重启都重置。

易错点

  • --mount 不会创建不存在的绑定源目录,路径拼错会直接失败(这也让问题更早暴露,属于优点但要预期到)
  • 两种挂载写法混在同一命令里,排查挂载问题时需要同时读懂两套规则,成本翻倍
  • 把需要持久化的数据挂在 tmpfs 上,重启后数据消失且难以恢复
  • 逗号写成了空格导致参数解析异常,报错信息往往只提示格式问题,不指向具体字段

数据来源与参考

  • Docker 官方 CLI 参考:docker run 的 --mount(docs.docker.com)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌