首页/云/Docker 容器速查/卷与挂载的只读选项
网络与存储52 条

卷与挂载的只读选项

给挂载加只读后缀:配置、静态资源等不需要写入的目录用 :ro 或 readonly,容器内进程即使被攻破也难以篡改内容。

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

不该写的目录就锁上

给挂载加只读后缀,容器内进程即使被入侵也无法改写这部分内容。配置目录、静态资源、只提供给读取方的共享数据都适合这样处理,成本低而效果直接。写法有两种:简写形式在挂载路径后加 :ro,长格式用 --mount 并把 readonly 作为选项写出来。需要注意的是它只约束挂载点本身,容器其余目录的写权限不受影响。

基本信息

简写-v 卷名:/容器内路径:ro
长格式--mount type=bind,source=宿主路径,target=/容器内路径,readonly
适用对象配置、静态资源、共享数据的读取方
验证容器内对挂载点执行 touch 应失败

典型使用场景

  • 配置只读:防止运行期被误改,也阻断被篡改后写回的可能
  • 静态资源只读:前端产物挂进 web 容器只供读取
  • 共享卷读侧加固:写权限只留给真正需要的那个容器
  • 敏感凭据目录:只读挂载避免应用反向写入或覆盖
  • 滚动更新前验证:确认应用确实没有依赖写配置文件的行为

只读挂载与验证

只读挂载与验证
# 配置目录以只读方式挂载
docker run -d --name api -v appconfig:/etc/app:ro app/api:1.4.2

# 长格式写法,语义更明确
# docker run --mount type=bind,source=/srv/static,target=/usr/share/nginx/html,readonly nginx:1.27-alpine

# 容器内验证挂载点不可写
docker exec api sh -c 'echo x > /etc/app/probe' || echo 'readonly ok'

# 核对挂载属性
docker inspect -f '{{json .Mounts}}' api

写入权限对照

写法可读可写
-v 卷:/data是是
-v 卷:/data:ro是否
--mount …,readonly是否
tmpfs 挂载是是,写在内存里,停止即消失
只读挂载是部署侧最省力的约束手段,与非 root 用户运行、只读根文件系统叠加使用,效果更完整。
只读不会阻止进程读取内容,敏感信息放在只读卷里仍是可读的,权限控制要结合运行用户一并设计。
判断某个挂载是否真的只读,除了读 inspect 的 Mounts 字段,更直接的办法是在容器里对该路径执行一次写操作,看返回的报错是否指向只读文件系统。

易错点

  • 应用需要动态改配置却挂了只读:启动或运行时直接报错,配置类需求要改用支持动态加载的方案
  • 把 :ro 当成整体只读:它只约束这一个挂载点,容器其余目录仍可写
  • 只读挂载但运行用户是 root:写保护的收益被削弱,配合非 root 用户才有完整效果
  • 共享卷读侧忘记加 :ro:读方一旦被入侵就能改写共享数据,影响到所有消费方

数据来源与参考

  • Docker 官方文档:read-only bind mounts 与卷选项(docs.docker.com)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌