启动容器并指定卷时,您可以选择附加第三个字段,该字段是逗号分隔的选项列表,例如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
(读/写)指定为绑定安装目录的第三个选项时到底意味着什么?
答案 0 :(得分:1)
DavidMaze在评论中说
以与主机上的/可读写的方式相同,但并非在每个文件上都可以写入;如果以只读方式安装,则没人可以写任何文件。
还有docs:
如果未指定'rw'或'ro',则该卷以读写模式安装。
和
如果您提供host-dir的绝对路径,则Docker绑定到您指定的路径。
默认情况下,该目录以rw “已挂载” 。因此,认为要在目录中写入rw
挂载是不够的,还需要对其具有文件许可权。另一方面,如果目录安装为只读,则拥有完整文件权限是不够的。认为它是两层权限。
Also:
但是,使绑定安装为只读的能力具有明显的价值。容器就是一个例子:管理员可能希望创建一个容器,在该容器中进程可能以root身份运行。该容器可以访问主机上的文件系统可能很有用,但是该容器不必一定具有对那些文件系统的写访问权限。