绑定挂载目录时“ rw”是什么意思

时间:2018-12-13 19:51:16

标签: docker docker-compose

启动容器并指定卷时,您可以选择附加第三个字段,该字段是逗号分隔的选项列表,例如rw

docker run -v /some-host/path:/some-container/path:rw

这些相同的选项适用于docker.compose.yml

services:
  myService:
    image: some/image
    volumes:
      - /some-host/path:/some-container/path:rw

我认为指定rw意味着该容器将能够从该目录读取和写入该目录(无论用户如何)。与我的看法相反,当主机目录不存在时,无论我指定了什么,docker都将其创建为drwxr-xr-x 2 root root。容器中的应用程序虽然未在root上运行,所以它尝试写入已安装的驱动器并获取Permission denied

我已经仔细阅读了docker文档,甚至发现这个github issue描述了相同的问题,但是找不到任何可以解释预期行为的确定性

当将rw(读/写)指定为绑定安装目录的第三个选项时到底意味着什么?

1 个答案:

答案 0 :(得分:1)

DavidMaze在评论中说

  

以与主机上的/可读写的方式相同,但并非在每个文件上都可以写入;如果以只读方式安装,则没人可以写任何文件。

还有docs

  

如果未指定'rw'或'ro',则该卷以读写模式安装。

  

如果您提供host-dir的绝对路径,则Docker绑定到您指定的路径。

默认情况下,该目录以rw “已挂载” 。因此,认为要在目录中写入rw挂载是不够的,还需要对其具有文件许可权。另一方面,如果目录安装为只读,则拥有完整文件权限是不够的。认为它是两层权限。

Also

  

但是,使绑定安装为只读的能力具有明显的价值。容器就是一个例子:管理员可能希望创建一个容器,在该容器中进程可能以root身份运行。该容器可以访问主机上的文件系统可能很有用,但是该容器不必一定具有对那些文件系统的写访问权限。