首页 > 解决方案 > Docker 用户命名空间隔离:权限被绑定挂载拒绝

问题描述

我启用了用户命名空间隔离,如archwiki和docker文档中所述。

但是,当我尝试使用绑定挂载时:

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

我得到:

docker:来自守护进程的错误响应:未能创建 shim: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

码头重映射:200000:65536

码头重映射:200000:65536

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

{ "userns-remap": "dockremap" }

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

drwxr-xr-x 2 dockremap dockremap 4,0K 24 juin 13:08 bmount

码头工人信息给出了这个:

客户端:上下文:默认调试模式:false 插件:应用程序:Docker 应用程序(Docker Inc.,v0.9.1-beta3) buildx:使用 BuildKit 构建(Docker Inc.,v0.5.1-tp-docker)

服务器:容器:0 运行:0 暂停:0 停止:0 图像:2 服务器版本:20.10.7 存储驱动程序:overlay2 支持文件系统:extfs 支持 d_type:true 本机覆盖差异:false
userxattr:false 日志驱动程序:json-file Cgroup 驱动程序:systemd Cgroup 版本:2 插件:卷:本地网络:网桥主机 ipvlan macvlan null 覆盖日志:awslogs fluentd gcplogs gelf journald json-file 本地日志 splunk syslog Swarm:非活动运行时:io .containerd.runtime.v1.linux runc io.containerd.runc.v2 Default Runtime: runc Init Binary: docker-init containerd version: 36cc874494a56a253cd181a1a685b44b58a2e34a.m runc version: b9ee9c6314599f1b4a7f497e1f1f856fe433d3b7 init version: de40ad0 Security Options: seccomp Profile: default userns cgroupns Kernel版本:5.12.11-arch1-1 操作系统:Arch Linux 操作系统类型:linux 架构:x86_64 CPU:2 总内存:3.735GiB 名称:CRIQUET ID:AT7Q:T3HO:HBFF:H7AM:XABE:KY4B:AQ2H:POBZ:YUE3 :XGOT:4ROB:SDUX Docker 根目录:/var/lib/docker/200000.200000 调试模式:假注册表: https://index.docker.io/v1/标签:实验性:false 不安全的注册表:127.0.0.0/8 启用实时恢复:false

$ unname -a

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

标签: linuxdockerpermissionsfile-permissionslinux-namespaces

解决方案


推荐阅读