Docker run -v 的 rw 和 ro 模式

一、前言

docker run --volume , -v:绑定一个卷(可以绑定文件,也可以绑定文件夹)

为什么要使用 -v 

  • docker 启动容器时,如果不使用 -v/--volume 挂载宿主机的文件或文件夹,容器内的配置文件只能进入到容器内才能修改,输入的日志也是在容器里查看;这样不方便修改配置,也不利于日志查看;所以一般都是进行 -v 参数来进行挂载文件或文件夹
  • 举个例子,如果我们 docker 容器内启动了nginx,但是没有进行 挂载,那么我们只能进入容器里进行修改nginx.conf配置,查看日志,更改静态包
  • 但是如果启动时,进行文件和文件夹的挂载,那么我们直接操作宿主机下对应的文件和文件夹就可以得到我们想要的

其中 rw 、 ro 和 “不指定模式” ,关系到 宿主机 和 容器 的文件变化关系,所以需要单独记录一下

二、rw、ro 和 不指定 的 区别

  • 不指定(默认)
    • 文件:
      • 宿主机 修改该文件后容器里面看不到变化
      • 容器 里面修改该文件,宿主机也看不到变化
    • 文件夹:不管是宿主机还是容器内 修改、新增、删除文件 都会相互同步
  • ro
    • 文件:容器内不能修改,会提示read-only
    • 文件夹:容器内不能修改、新增、删除文件夹中的文件,会提示read-only
  • rw
    • 文件:不管是宿主机还是容器内修改,都会相互同步;但容器内不允许删除,会提示Device or resource busy;宿主机删除文件,容器内的不会被同步
    • 文件夹:不管是宿主机还是容器内修改、新增、删除文件,都会相互同步

三、通过 dokcer inspect CONTAINER ID 命令进行查看挂载情况

在 Mounts 内 的 Mode属性,举个例子,我的nginx挂载信息(因为元数据过多,所以只截取Mounts部分)

"Mounts": [
            {
                "Type": "bind",
                "Source": "/Users/wangjing/Documents/docker/nginx/conf/nginx.conf",
                "Destination": "/etc/nginx/conf/nginx.conf",
                "Mode": "rw",
                "RW": true,
                "Propagation": "rprivate"
            },
            {
                "Type": "bind",
                "Source": "/Users/wangjing/Documents/docker/nginx/html",
                "Destination": "/usr/share/nginx/html",
                "Mode": "",
                "RW": true,
                "Propagation": "rprivate"
            }
]

注:官方建议用映射目录的方式来互相同步修改。

注:以上内容仅提供参考和交流,请勿用于商业用途,如有侵权联系本人删除!

上一篇:Java面试题之:线程基本方法


下一篇:synchronized, 和 wait方法, notify方法总结