【问题标题】:How can Docker container write to a mounted directory with permissions granted through group membership?Docker 容器如何写入具有通过组成员资格授予的权限的挂载目录?
【发布时间】:2019-03-13 08:52:50
【问题描述】:

版本

  • 主机操作系统:Debian 4.9.110
  • Docker 版本:18.06.1-ce

场景

我有一个目录,其中多个用户(user-auser-b)通过公共组成员身份(shared)具有读/写访问权限,通过 chown 设置:

/media/disk-a/shared/$ ls -la
drwxrwsr-x 4 user-a shared 4096 Oct  7 22:21 .
drwxrwxr-x 7 root   root   4096 Oct  1 19:58 ..
drwxrwsr-x 5 user-a shared 4096 Oct  7 22:10 folder-a
drwxrwsr-x 3 user-a shared 4096 Nov 10 22:10 folder-b

UID 和 GID 如下:

uid=1000(user-a) gid=1000(user-a) groups=1000(user-a),1003(shared)
uid=1002(user-b) gid=1002(user-b) groups=1002(user-b),1003(shared)

相关的/etc/group 看起来像这样:

shared:x:1003:user-a,user-b

su同时进入两个用户时,可以在共享目录中按预期创建文件。

共享目录通过挂载绑定到/shared/ 附加到Docker 容器。 Docker 容器以user-b 运行(使用--user "1002:1002" 参数)

$ ps aux | grep user-b
user-b     1347  0.2  1.2 1579548 45740 ?       Ssl  17:47   0:02 entrypoint.sh

id 从容器内打印以下,对我来说看起来不错的结果:

I have no name!@7a5d2cc27491:/$ id
uid=1002 gid=1002

ls -la 也完美地反映了它的主机系统:

I have no name!@7a5d2cc27491:/shared ls -la
total 16
drwxrwsr-x 4 1000 1003 4096 Oct  7 20:21 .
drwxr-xr-x 1 root root 4096 Oct  8 07:58 ..
drwxrwsr-x 5 1000 1003 4096 Oct  7 20:10 folder-a
drwxrwsr-x 3 1000 1003 4096 Nov 10 20:10 folder-b

问题

在容器中,我无法向共享目录写入任何内容。对于touch test,我得到以下信息:

I have no name!@7a5d2cc27491:/shared$ touch test
touch: cannot touch 'test': Permission denied

我可以写入由user-b(用户和组)直接拥有并安装到容器的目录...只是组成员身份似乎根本不受尊重。

我已经研究过 user namespace remapping 之类的东西,但这些似乎是解决方案不适用于这里的东西。我错过了什么?

【问题讨论】:

    标签: docker permissions docker-volume


    【解决方案1】:

    您的容器用户拥有gid=1002,但不是sharedgid=1003 组的成员。

    除了--user "1002:1002",您还需要--group-add 1003。 允许容器用户使用gid=1003 访问共享文件夹。

    id 应该显示:

    I have no name!@7a5d2cc27491:/$ id
    uid=1002 gid=1002 groups=1003
    

    【讨论】:

    • 确实!这解决了我的问题。由于我使用 docker-compose,我不得不将 docker-compose 文件版本设置为“2”,因为修订版 3 不再支持 group_add。非常感谢@mviereck!
    • 不客气!如果您需要不支持组添加的 docker-compose 3,您可以创建自定义 /etc/passwd/etc/group。作为一个快速的'n'dirty 测试,您可以从主机共享文件。很好的副作用:你的容器用户会有一个名字。
    猜你喜欢
    • 2014-03-30
    • 2011-02-23
    • 2017-07-31
    • 2021-12-10
    • 2015-11-07
    • 2018-03-25
    • 2023-01-03
    • 2013-08-08
    相关资源
    最近更新 更多