linux - 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
解决方案
推荐阅读
- npm - 从 npm-shrinkwrap.json 创建或派生 package-lock.json 文件
- powershell - 从 Azure Function 将 Azure Blob 附加到 PowerShell 中的电子邮件
- javascript - 为什么当我们在浏览器中按下后退按钮时 jquery 没有隐藏内容
- python - pyautogui.keydown() 是否没有在 python 的 bind() 函数中注册为事件?
- oop - 在 Dart 中将类型定义为“Comparable”
- python - 在多个模块中添加参数时出现 argparse.ArgumentParser ArgumentError
- transactions - 区块链中的交易如何运作?分步演练
- sql - psql generate_series 方法不支持里面的 concat
- javascript - Vue挂载事件未执行
- javascript - 城市名称的自动完成不起作用