我可以控制 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 映像中绑定安装卷的所有者吗?的主要内容,如果未能解决你的问题,请参考以下文章

无法在代理后面下载 Docker 映像

如何创建没有 EBS 的预留实例的“实例存储”AMI 映像

docker的数据卷的作用

在构建 Docker 映像时要求安装 Typescript

从 Spring Boot Jar 构建 Docker 映像

将Python软件包安装到Docker映像的不同方法