我可以控制 Docker 映像中绑定安装卷的所有者吗?
Posted
技术标签:
【中文标题】我可以控制 Docker 映像中绑定安装卷的所有者吗?【英文标题】:Can I control the owner of a bind-mounted volume in a docker image? 【发布时间】:2015-07-20 09:04:14 【问题描述】:我有一个包含 Eclipse 的 docker 映像。我在名为 eclipse 的帐户下运行映像中的 eclipse。我想从主机绑定安装到容器中的工作区目录开始映像。不幸的是,容器内已安装卷的所有者不是 eclipse。挂载的卷只保留来自主机的 UID 和 GID。
有没有办法控制挂载在容器中的卷在哪个 UID 和 GID 下?
【问题讨论】:
【参考方案1】:我相信此时没有办法将 UID 和 GID 设置为 docker 中的挂载选项。但至少有两种方法可以解决这个问题:
匹配主机和容器中所有者/用户的 UID 和 GID。在您的情况下,如果主机上的所有者 ID 和 GID 为 1000,请确保容器中拥有用户的 uid/gid 具有相同的 UID 和 GID,在本例中为 1000。
使用文件访问控制列表命令getfacl
- 获取容器上工作区目录所有者的uid/gid,并使用setfacl
命令在主机上授予该id读/写权限。您必须在主机上运行 setfacl。这样,acl 权限将传播到容器。我不建议在容器级别进行任何所有权更改,因为这会扰乱主机上的所有权,并且不会在您下次从映像启动容器时保留。
请记住,在文件权限方面,只有numeric id
很重要。
有用的链接 - permission inside containers
【讨论】:
谢谢,我发现我可以通过操纵 UID 和 GID 来解决问题,我只是希望有更好的方法来控制它。【参考方案2】:让工作区可写是可以接受的吗?我相信没有办法改变挂载目录的uid/gid,所以唯一的选择是在主机和容器之间匹配uid/gid(讨厌:()
有关 uid/gid 的信息,请参阅 https://github.com/docker/docker/issues/7198
【讨论】:
以上是关于我可以控制 Docker 映像中绑定安装卷的所有者吗?的主要内容,如果未能解决你的问题,请参考以下文章