Docker run -v 的 rw 和 ro 模式_docker ro

发布于:2025-05-21 ⋅ 阅读:(15) ⋅ 点赞:(0)

一、前言

在使用 Docker 启动容器时,通常需要将宿主机的文件或目录挂载到容器中,以便于管理配置、持久化数据和调试日志。本篇博客将重点介绍 -v/--volume 参数的使用方式、挂载权限(rwro)的区别,以及如何通过 docker inspect 命令查看挂载详情。

二、为什么需要挂载卷

  • 配置管理便利:不挂载时,修改容器内配置需要进入容器执行命令;挂载后,可直接在宿主机上编辑配置文件即可生效。
  • 日志持久化与查看:容器日志默认存放在容器内,通过挂载宿主目录可快速定位和分析日志。
  • 数据持久化:容器被销毁后,未挂载的文件将随之丢失;挂载卷可保证数据在容器重建后依然保留。

以 Nginx 为例:

  • 未挂载时:需使用 docker exec -it <container> /bin/sh 进入容器内,编辑 /etc/nginx/nginx.conf,并重启服务。
  • 挂载时:只需在宿主机编辑本地的 nginx.conf,保存后容器内配置自动更新。

三、挂载权限:rorw 与默认模式

模式 文件操作表现
不指定 等同于 rw,读写挂载;
ro 只读挂载:• 文件:容器内无法修改;• 目录:容器内无法新增/删除或修改包含的文件,会提示 read-only
rw 读写挂载:• 文件:宿主机与容器内的修改会相互同步,但容器内删除宿主机文件可能报错 Device or resource busy;• 目录:所有新增、修改、删除操作均可双向同步。

默认模式即不指定时,Docker 会将挂载视为 rw

四、查看挂载信息:docker inspect

使用 docker inspect <容器ID或名称>,在返回的 JSON 中查找 Mounts 数组,即可看到挂载列表及详细属性:

"Mounts": [
  {
    "Type": "bind",
    "Source": "/Users/yuanmomo/Documents/docker/nginx/conf/nginx.conf",
    "Destination": "/etc/nginx/conf/nginx.conf",
    "Mode": "rw",
    "RW": true,
    "Propagation": "rprivate"
  },
  {
    "Type": "bind",
    "Source": "/Users/yuanmomo/Documents/docker/nginx/html",
    "Destination": "/usr/share/nginx/html",
    "Mode": "",
    "RW": true,
    "Propagation": "rprivate"
  }
]
  • Type:挂载类型(bind 表示目录绑定)。
  • Source:宿主机路径。
  • Destination:容器内路径。
  • Mode:读写模式(rwro 或空表示默认 rw)。

五、最佳实践

  1. 使用目录映射:优先挂载目录代替单个文件,可避免容器应用重启或覆盖时出现加载失败。
  2. 配置文件管理:将配置目录集中管理,如 /etc/nginx/conf.d/,通过映射方式加载多份配置。
  3. 日志分离:将日志文件目录挂载到宿主机指定目录,以便于统一收集和分析。
  4. 权限控制:生产环境中建议对敏感目录使用 ro 模式,降低误操作风险。

六、结语

本文介绍了 Docker 挂载卷的基本使用方法、rorw 模式的差异,以及如何通过 docker inspect 查看挂载信息。希望能帮助大家在日常容器管理中更加高效、可靠地使用挂载卷。