RHEL 7.9下非root部署docker rootless daemon报错求助
RHEL 7.9 非root用户部署Rootless模式Docker Daemon报错排障
已执行的常规部署步骤
- 新建并切换至非root权限的test用户
- 拉取官方rootless安装脚本完成Docker rootless组件部署
- 按官方指引配置三类运行环境变量:
export XDG_RUNTIME_DIR=/home/test/.docker/runexport PATH=/home/test/bin:$PATHexport DOCKER_HOST=unix:///home/test/.docker/run/docker.sock
- 手动启动dockerd进程时执行命令:
PATH=/home/test/bin:/sbin:/usr/sbin:$PATH dockerd-rootless.sh
启动阶段输出的报错信息
WARN[0000] The host root filesystem is mounted as "". Setting child propagation to "rslave" is not supported.
[rootlesskit:parent] error: failed to setup UID/GID map: newuidmap 666 [0 1003 1 1 296608 65536] failed: newuidmap: write to uid_map failed: Operation not permitted : exit status 1
根因定位与修复操作
该报错的核心诱因是RHEL7.9默认配置不满足Rootless模式的权限要求,具体为subuid映射规则缺失、newuidmap/newgidmap二进制权限不对、用户命名空间的内核参数被限制三类问题,按以下步骤逐一修复即可:
- 检查/补全用户subuid、subgid映射规则
- 确认
/etc/subuid和/etc/subgid文件中存在test用户的合法映射条目,标准格式为test:100000:65536(即从100000起始分配连续65536个可用UID/GID给test用户) - 确认两个配置文件的权限为644,属主为root,避免非特权用户无法读取映射规则
- 确认
- 调整用户命名空间相关内核参数
- 编辑
/etc/sysctl.conf,追加以下配置:user.max_user_namespaces = 15000kernel.unprivileged_userns_clone = 1
- 执行
sysctl -p使配置即时生效
- 编辑
- 补全newuidmap/newgidmap的SUID执行权限
- 执行
ls -l /usr/bin/newuidmap /usr/bin/newgidmap检查权限,正常权限应为-rwsr-xr-x. root root - 若缺失SUID位,执行
chmod u+s /usr/bin/newuidmap /usr/bin/newgidmap修正权限
- 执行
- 处理启动时的挂载传播警告
- 该警告不影响核心功能,仅代表当前主机根文件系统的挂载传播模式不支持rslave子挂载设置,可在启动时追加环境变量
DOCKERD_ROOTLESS_ROOTLESSKIT_PROPAGATION=private屏蔽该警告
- 该警告不影响核心功能,仅代表当前主机根文件系统的挂载传播模式不支持rslave子挂载设置,可在启动时追加环境变量
适配单容器运行场景的优化方案
- 无需手动在终端拉起dockerd进程,可通过用户级systemd托管rootless dockerd,避免手动配置的环境变量随终端会话退出丢失
- 若仅需运行单个容器、不需要完整daemon的多容器编排能力,可直接使用rootless自带的docker客户端通过配置的Unix Socket直连进程,减少不必要的资源占用
内容的提问来源于stack exchange,提问作者tkcode
相关产品推荐
相关产品推荐

