问题描述
我正在处理 Docker 用户命名空间重新映射:https://docs.docker.com/engine/security/userns-remap/
我通过修改 /etc/docker/daemon.json
启用了 Docker 用户命名空间重新映射。内容目前看起来像这样:
{
"userns-remap": "default"
}
我已经重新启动了 Docker 守护进程。默认 dockremap
用户是按照文档的承诺创建的:
user@host:~$ id dockremap
uid=125(dockremap) gid=134(dockremap) groups=134(dockremap)
/etc/subuid
中还有一个条目:
dockremap:165536:65536
现在,我有一个包含共享文件的文件夹,我希望将其绑定安装在容器内以使其可供读取。在主机操作系统上,该文件具有以下所有者和权限设置:
-rwxrwx--- 1 dockremap dockremap 0 april 8 19:19 shared_file.txt
该文件不应该是全局可写的。我的实际意图是在主机操作系统和容器之间安全地共享包含一些秘密信息的文件。
如果有任何不同,父目录是全局可写的:
drwxrwxrwx 3 dockremap dockremap 4,0K april 8 19:20 .
我将它绑定安装到一个 Alpine 容器中,如下所示:
docker run --rm -it -w /work -v $(pwd)/shared_file.txt:/work/shared_file.txt remaptest ls -lah
我现在希望该文件由容器内的 UID 为 0 的 root
所有,因此可供读取。相反,它归 nobody
所有,root
不可读:
-rwxrwx--- 1 nobody nobody 0 Apr 8 16:19 shared_file.txt
nobody
具有以下 ID:
/work # id nobody
uid=65534(nobody) gid=65534(nobody) groups=65534(nobody)
我是否对用户命名空间重新映射和绑定挂载文件系统权限如何协同工作有错误的期望,或者这里有什么问题?我已经在两台不同的 PC 上对此进行了测试。其中一个运行 Ubuntu,另一个运行 Mint。
我还使用 Ubuntu-based
容器而不是 Alpine-based
容器进行了测试,但结果几乎相同。我当然可以修改用于构建映像的 Dockerfile,但我的印象是我上面这样做的方式应该可行。
我想与它一起使用的实际 Dockerfile
来自 Docker Hub,我不想弄乱它的设置方式。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)