全部学科
NodeJS全栈
nodejs
Python全栈
python
📅 2026-05-21 6 分钟 ✍️ juanwangdev

Rootless 模式运行

Rootless Docker 消除 root 权限风险,下面介绍配置方法。

Rootless 原理

Bash
传统 Docker (root):
Docker Daemon 以 root 运行 → 容器进程以 root 运行

Rootless Docker:
Docker Daemon 以普通用户运行 → 容器进程以普通用户运行

Rootless 模式通过 USER Namespace 实现,容器 root 映射为宿主普通用户。

安装 Rootless

Bash
# 安装 Rootless Docker
curl -fsSL https://get.docker.com/rootless | sh

# 配置环境变量
export PATH=/home/user/bin:$PATH
export DOCKER_HOST=unix:///run/user/1000/docker.sock

启动 Rootless Daemon

Bash
# 启动 Rootless Docker Daemon
systemctl --user start docker

# 开机自启
systemctl --user enable docker

运行容器

Bash
# 运行容器(与 root 模式相同)
docker run -d --name my-app -p 8080:80 nginx

# 容器内 root = 宿主普通用户
docker exec my-app whoami
# 输出: root(但实际是宿主 uid=1000)

限制

网络限制

Bash
# Rootless 不支持 host 网络
docker run --network host nginx  # 失败

# 不支持端口绑定(<1024)
docker run -p 80:80 nginx  # 失败
docker run -p 8080:80 nginx  # 成功

存储限制

Bash
# 仅支持 overlay2 驱动
# 不支持某些存储选项

资源限制

Bash
# Cgroups 需要额外配置
# 默认无资源限制,需配置 systemd slice

Rootless vs Rootful

特性RootlessRootful
安全性
端口绑定≥1024任意
网络模式bridge 仅全部
存储驱动overlay2多种
推荐场景开发/测试生产

生产环境注意

Bash
# Rootless 适合开发和测试
# 生产环境仍建议使用 rootful + 安全加固

# 原因:
# - 端口限制
# - 网络功能不完整
# - 某些安全选项不支持

混合部署

text
# Rootful 生产环境
sudo dockerd

# Rootless 开发环境
systemctl --user start docker

要点总结

  • Rootless Docker 以普通用户运行 Daemon,消除 root 权限风险
  • 通过 USER Namespace 实现容器 root 映射为宿主普通用户
  • 不支持 host 网络和低端口绑定(<1024)
  • 仅支持 overlay2 驱动,某些存储选项不可用
  • 适合开发测试,生产环境仍需 rootful + 安全加固
想在手机上练习这篇文章的配套题目?
使用微信卷王开发者小程序,打开首页顶部扫码功能识别二维码
← 上一篇 容器逃逸攻击向量
下一篇 → 镜像供应链安全
扫码体验小程序
加载中
想在手机上刷题学习?
使用微信卷王开发者小程序,打开首页顶部扫码功能识别二维码