You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker Rootless嵌套运行Jenkins遇UID/GID映射失败问题求助

解决Rootless Docker + Sysbox运行时UID/GID映射失败的问题

这个错误是Rootless Docker环境下最常见的权限类问题之一,结合你用Sysbox runtime搭建安全构建环境的场景,咱们一步步排查解决:

1. 先确认用户的UID/GID范围配置

Rootless Docker完全依赖/etc/subuid和/etc/subgid文件给普通用户分配额外的UID/GID资源池,没有这个基础配置就没法完成映射操作。

  • 先检查当前用户(你用来启动Rootless Docker、Jenkins的用户)是否有足够的UID/GID范围:

    cat /etc/subuid | grep $USER
    cat /etc/subgid | grep $USER
    

    正常应该输出类似your_username:100000:65536的内容,代表给该用户分配了从100000开始的65536个连续UID/GID。

  • 如果没有输出或者范围不足,用root权限补充配置:

    sudo usermod --add-subuids 100000-165535 $USER
    sudo usermod --add-subgids 100000-165535 $USER
    

    注意:配置完成后必须重新登录当前用户,让系统加载新的UID/GID范围,仅用su切换用户不会触发配置生效。

2. 开启非特权用户命名空间支持

部分Linux发行版默认禁用了非特权用户创建用户命名空间的权限,这会直接导致newuidmap操作被拒绝:

  • 先检查当前系统配置:
    sysctl kernel.unprivileged_userns_clone
    
    如果输出为kernel.unprivileged_userns_clone = 0,需要开启该配置:
    echo "kernel.unprivileged_userns_clone=1" | sudo tee -a /etc/sysctl.conf
    sudo sysctl -p
    

3. 验证Rootless Docker的UID映射配置

有时候用户自定义的Docker daemon配置会干扰默认的UID映射逻辑,检查用户目录下的配置文件:

  • 打开~/.config/docker/daemon.json,如果里面有"userns-remap"字段,确保它的值是"default"(表示使用当前用户的subuid/subgid配置),不要设置为自定义用户组。如果没有这个字段也无需添加,Rootless Docker默认会采用正确的映射规则。

  • 重启Rootless Docker服务使配置生效:

    systemctl --user restart docker
    

4. 检查Sysbox Runtime的兼容性

Sysbox本身是为了增强容器隔离能力,但它在Rootless环境下同样依赖正确的UID/GID映射配置:

  • 确保你安装的是最新版的Sysbox,旧版本可能存在Rootless环境的兼容bug。
  • 如果Sysbox是系统级安装的,重启服务确保配置同步:
    sudo systemctl restart sysbox
    

最后验证

完成以上步骤后,先手动测试Rootless Docker + Sysbox的基础功能:

docker run --rm --runtime sysbox alpine echo "Test successful"

如果这个命令能正常执行,再启动Jenkins容器应该就不会再出现UID/GID映射失败的问题了。

内容的提问来源于stack exchange,提问作者Manuel L.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 17:43:13