【问题标题】:Docker - Feed data from read-only directory on host into containerDocker - 将主机上只读目录中的数据馈送到容器中
【发布时间】:2017-09-22 07:33:05
【问题描述】:

我是 Docker 的新手,所以如果答案很明显,请多多包涵。

我正在尝试让我的 docker 容器访问主机上的共享数据目录,该目录具有特定的组权限并且对于预期用户的组是只读的。

我已经尝试过docker run -it -v /data:/data ubuntu /bin/bash,结果出现错误docker: Error response from daemon: error while creating mount source path '/data': mkdir /data: permission denied。所以这显然是一个权限问题。

我在谷歌上看到的要点是,如果你绑定挂载一个卷,你需要有读写权限。 所以我正在寻找另一种方式,可能是docker volume?

数据目录很大,所以任何形式的复制都是不可行的。此外,无法更改权限。

系统信息:

docker Server Version: 17.03.1-ce

Operating System: Ubuntu 16.04.2 LTS


编辑:

所以在@barat 的有用评论之后,我终于想通了。

问题是,我试图在容器内挂载的确切目录的权限设置为只有特定组的成员才能读取内容。我尝试了从docker run -u userwithaccess、docker run --privileged 到在Dockerfile 中添加用户并专门将相关组分配给该用户的所有方法。没有任何效果。

最后解决的方法比较简单:

我的数据目录的父目录对每个人都具有读取权限,即不是组成员的用户。所以我能够毫无问题地安装它。 为了获得实际数据,我确实将Dockerfile 中的用户添加到组,并确保它具有相同的名称和GID。最后导航到数据目录并读取我想要的任何文件都没有问题。

所以我不确定我尝试挂载的目录是否只是一种特殊情况,或者是否通常无法挂载具有特定组访问权限的目录。 我找到了这个解决方法,但如果我想要的目录位于/,我仍然没有解决方案。

【问题讨论】:

  • 你试过在privileged模式下运行吗?
  • 是的,不幸的是结果相同

标签: docker ubuntu-16.04 large-data-volumes


【解决方案1】:

试试这个:

docker run -v /path/on/host:/path/on/container:ro my/image

绑定挂载的默认行为是 rw,但您可以将其切换为只读 (:ro)

【讨论】:

  • docker 用户/组是否也有对该路径的读取权限?因为IMO做“docker something”挂载等是作为“docker”用户,加上如果你创建了“docker”组 - docker会检查当前用户是否在这个组中,这样你就可以在没有sudo的情况下使用docker命令......这可以意思是,那个 docker 组应该至少有(?)对该路径的读取权限......
  • 问题是,我对权限没有影响,这意味着我知道 docker 组对目录没有任何访问权限。对于 docker 用户,您的意思是调用 docker 命令的用户?这个有访问权限,我试图将它传递给容器,但没有成功......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-03-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-29
  • 2016-11-10
  • 1970-01-01
相关资源
最近更新 更多