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

一、前言

在使用 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 数组,即可看到挂载列表及详细属性:

json 复制代码
"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 查看挂载信息。希望能帮助大家在日常容器管理中更加高效、可靠地使用挂载卷。

相关推荐
FrankYoou34 分钟前
Jenkins 与 GitLab CI/CD 的核心对比
java·docker
隆里卡那唔1 小时前
在dify中通过http请求neo4j时为什么需要将localhost变为host.docker.internal
http·docker·neo4j
疯子的模样1 小时前
Docker 安装 Neo4j 保姆级教程
docker·容器·neo4j
Lpy25694 小时前
Docker Desktop 安装到D盘(包括镜像下载等)+ 汉化
运维·docker·容器
hunjinYang5 小时前
Tomcat镜像实战:掌握Dockerfile的编写以及发布项目
docker·tomcat
好奇的菜鸟5 小时前
Docker 配置项详解与示例
运维·docker·容器
IT成长日记11 小时前
【Docker基础】Docker数据卷管理:docker volume inspect及其参数详解
运维·docker·容器·volume·inspect
ladymorgana11 小时前
【Docker】如何设置 `wiredTigerCacheSizeGB` 和 `resources.limits.memory`
运维·docker·容器
mcdx12 小时前
基于Docker构建OrangePi5 SDK环境
docker·容器
杨浦老苏13 小时前
Docker端口映射查看工具Dockpeek
网络·docker·群晖