Docker 用户命名空间隔离:使用绑定挂载

问题描述

我启用了用户命名空间隔离,如 archwikidocker documentation 中所述。

但是,当我尝试使用绑定安装时:

# this is fish shell
$ docker run --rm -it -v (pwd)/bmount/:/bmount alpine sh

我明白了:

docker: 来自守护进程的错误响应:无法创建垫片:OCI 运行时 创建失败:container_linux.go:380:启动容器进程 导致:process_linux.go:545:容器初始化导致: rootfs_linux.go:76:将“xxxx/bmount”挂载到“/bmount”的 rootfs 导致:stat xxxx/bmount:权限被拒绝:未知。

我设法让常规的 docker 卷正常工作。据我了解此设置,鉴于容器对文件夹具有权限,绑定安装应该可以正常工作,对吗?

以下是更多详细信息:

我创建了一个 dockremap 用户和组,两者的 UID/GID 均为 200000 这是/etc/subuid/etc/subgid

内容

dockremap:200000:65536

dockremap:200000:65536

并且docker配置为使用用户命名空间隔离,这里是/etc/docker/daemon.json

{ "userns-remap": "dockremap" }

我确保我试图绑定 mount 的 bmount 文件夹被 chown 到 dockremap

drwxr-xr-x 2 码头地图码头地图 4,0K 24 juin 13:08 bmount

docker info 给出了这个:

Client: Context: default Debug Mode: false Plugins: app: Docker App (Docker Inc.,v0.9.1-beta3) buildx: Build with BuildKit (Docker Inc.,v0.5.1-tp-docker)

服务器:容器:0 运行:0 暂停:0 停止:0 图像:2 服务器版本:20.10.7 存储驱动程序:overlay2 后备文件系统: extfs 支持 d_type: true Native Overlay Diff: false
userxattr: false 日志驱动程序: json-file Cgroup 驱动程序: systemd Cgroup 版本:2 插件:卷:本地网络:桥接主机 ipvlan macvlan null 覆盖日志:awslogs fluentd gcplogs gelf journald json 文件本地 logentries splunk syslog Swarm:不活动 运行时:io.containerd.runtime.v1.linux runc io.containerd.runc.v2 认运行时:runc Init Binary:docker-init containerd 版本: 36cc874494a56a253cd181a1a685b44b58a2e34a.m runc 版本: b9ee9c6314599f1b4a7f497e1f1f856fe433d3b7 初始化版本:de40ad0 安全选项:seccomp 配置文件用户 cgroupns 内核版本:5.12.11-arch1-1 操作系统:Arch Linux OSType: linux 架构:x86_64 cpu:2 总内存:3.735GiB 名称评论编号: AT7Q:T3HO:HBFF:H7AM:XABE:KY4B:AQ2H:POBZ:YUE3:XGOT:4ROB:SDUX Docker 根目录:/var/lib/docker/200000.200000 调试模式:false 注册表: https://index.docker.io/v1/ 标签:实验:假不安全 注册表: 127.0.0.0/8 已启用实时还原:false

$ uname -a

Linux CRIQUET 5.12.11-arch1-1 #1 SMP PREEMPT 星期三,2021 年 6 月 16 日 15:25:28 +0000 x86_64 GNU/Linux

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)