docker - Docker 容器如何写入具有通过组成员资格授予的权限的挂载目录?
问题描述
版本
- 主机操作系统:Debian 4.9.110
- Docker 版本:18.06.1-ce
设想
我有一个目录,其中多个用户(user-a
和user-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
进入两个用户时,可以在共享目录中按预期创建文件。
共享目录通过挂载绑定到 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
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
并安装到容器的目录......只是组成员身份似乎根本不受尊重。
我已经研究过诸如用户命名空间重新映射之类的东西,但这些似乎是针对某些不适用于这里的东西的解决方案。我想念什么?
解决方案
您的容器用户拥有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
推荐阅读
- mysql - 在 AWS RDS 上托管的数据库上导入 SQL 脚本期间出现 MySql 错误“max_allowed_packet”字节
- go - 将字节数组传递给插件函数
- python-3.x - 如何让 Flask 应用程序与 gunicorn 一起运行
- javascript - 在节点 js 中使用 if 条件发布数据所需的逻辑(需要验证)
- c++ - 无法转换 unordered_map
到 unordered_map - excel - 波维比 | CASE WHEN / If 文本字符串分类的条件
- php - 下载在codeigniter中损坏的Zip文件
- azure - Jenkins Azure VM 代理:环境变量
- rust - 在循环具有多态特征的向量时,不能将不可变的“Box”内容“**it”借用为可变的
- c++ - 如何在qt中的QTableWidget中保存和加载数据