我可以控制 docker 映像中绑定安装卷的所有者吗?

Can I control the owner of a bind-mounted volume in a docker image?

我有一张 docker 图片,其中包含日食。我在名为 eclipse 的帐户下 运行 图片中的 eclipse。我想从绑定安装到容器中的主机中使用我的工作区目录启动图像。不幸的是,容器内已安装卷的所有者不是 eclipse。安装的卷只保留主机的 UID 和 GID。

有没有办法控制在容器中挂载卷的UID和GID?

我认为目前无法在 docker 中将 UID 和 GID 设置为挂载选项。但至少有两种方法可以解决这个问题:

  1. 匹配主机和容器中owner/user的UID和GID。在您的情况下,如果主机上的所有者 ID 和 GID 为 1000,请确保容器中拥有用户的 uid/gid 具有相同的 UID 和 GID,在本例中为 1000。

  2. 使用文件访问控制列表命令getfacl - 获取容器上工作区目录所有者的uid/gid,并使用setfacl命令授予此权限主机的 id read/write 权限。您必须 运行 在主机上设置 facl。这样 acl 权限将传播到容器。我不建议在容器级别进行任何所有权更改,因为这会弄乱主机上的所有权,并且下次您从图像启动容器时它不会被保留。

请记住,在涉及文件权限时,只有 numeric id 很重要。

有用的链接 - permission inside containers

将工作区设为全局可写是否可以接受?我相信没有办法改变挂载目录的 uid/gid 所以唯一的选择是在主机和容器之间匹配 uid/gid (讨厌的 :( )

有关 uid/gid

的信息,请参见 https://github.com/docker/docker/issues/7198