Docker 容器如何使用通过组成员身份授予的权限写入挂载目录?

man*_*anu 5 permissions docker docker-volume

版本

  • 主机操作系统: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
Run Code Online (Sandbox Code Playgroud)

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)
Run Code Online (Sandbox Code Playgroud)

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

shared:x:1003:user-a,user-b
Run Code Online (Sandbox Code Playgroud)

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

共享目录通过 mount 绑定到 Docker 容器/shared/。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
Run Code Online (Sandbox Code Playgroud)

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

I have no name!@7a5d2cc27491:/$ id
uid=1002 gid=1002
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

问题

在容器内,我无法向共享目录写入任何内容。因为touch test我得到以下即:

I have no name!@7a5d2cc27491:/shared$ touch test
touch: cannot touch 'test': Permission denied
Run Code Online (Sandbox Code Playgroud)

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

我已经研究了诸如用户命名空间重新映射之类的事情,但这些似乎是解决此处不适用的问题的方法。我想念什么?

mvi*_*eck 2

您的容器用户具有gid=1002,但不是 组的shared成员gid=1003

另外--user "1002:1002"你需要的--group-add 1003。比容器用户被允许访问共享文件夹gid=1003

id应该显示:

I have no name!@7a5d2cc27491:/$ id
uid=1002 gid=1002 groups=1003
Run Code Online (Sandbox Code Playgroud)