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
| 特性 | Rootless | Rootful |
|---|---|---|
| 安全性 | 高 | 低 |
| 端口绑定 | ≥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 + 安全加固
📝 发现内容有误?点击此处直接编辑