Docker Rootless 模式:降低守护进程高权限风险的部署要点

Rootless 与普通 Docker 的区别

传统 Docker daemon 以 root 身份运行,即使容器内进程降权,管理接口一旦被滥用仍可能影响整个宿主机。Rootless 模式把 daemon 和容器都放在非 root 用户的 user namespace 中,从架构上减少宿主机高权限暴露。

它与 userns-remap 不完全相同:userns-remap 主要映射容器用户,而 Rootless 连 daemon 本身也不以 root 运行。

前置条件

  • 系统需要 newuidmap 和 newgidmap。
  • /etc/subuid 与 /etc/subgid 要给运行用户分配至少 65536 个从属 UID/GID。
  • 建议使用 systemd 用户服务管理 daemon。
  • 网络、存储驱动和低端口绑定需要检查兼容性。

官方安装工具会创建用户级 systemd 服务和独立 Docker context。安装后应确认客户端连接的是 rootless socket,而不是仍然指向系统级 /var/run/docker.sock。

适合场景

  • 多用户开发机和 CI Runner。
  • 运行不可信构建任务的主机。
  • 不需要复杂宿主机网络和特权设备的 Web 应用。

不能解决的问题

Rootless 不是完整沙箱。内核漏洞、错误挂载、应用层漏洞和泄露的业务凭证仍然可能造成损害。容器还需要只读文件系统、能力裁剪、seccomp、资源限制和镜像供应链检查。

迁移建议

  1. 在独立测试用户下安装 Rootless daemon。
  2. 迁移无状态服务,验证端口、卷权限和容器网络。
  3. 不要同时暴露 rootful 与 rootless Docker socket。
  4. 为用户服务启用 linger,保证退出登录后容器继续运行。
  5. 备份 Compose 配置和数据卷,再逐个迁移状态服务。

原始资料:Docker Rootless 官方文档

本文转载自 Docker Docs,版权归原作者所有。

原文链接:https://docs.docker.com/engine/security/rootless/

抓取时间:2026年10月25日

本文采用 aggregate 索引策略。