Rocky Linux 9上安装Docker Rootless
一、前提条件
Rocky Linux 9 已更新且有一个非 root 用户(拥有 sudo 权限)。
安装以下系统包:
1
sudo dnf install -y uidmap dbus-user-session
uidmap提供newuidmap/newgidmap;dbus-user-session用于用户级 systemd/session 支持。确认
/etc/subuid和/etc/subgid为普通用户分配了至少 65536 个 subordinate UIDs/GIDs,例如:testuser:231072:65536可通过:
1
grep ^$(whoami): /etc/subuid /etc/subgid
验证是否正确配置
二、安装 Docker Engine(rootful)
添加 Docker 官方 RHEL/CentOS 仓库:
1
2sudo dnf install -y dnf-plugins-core
sudo dnf config-manager --add-repo https://download.docker.com/linux/rhel/docker-ce.repoRocky Linux 可使用兼容的 CentOS 仓库
安装 Docker 及 rootless extras:
1
sudo dnf install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin docker-ce-rootless-extras
启动并启用 Docker 服务(安装完成后):
1
sudo systemctl enable --now docker
如只想用于 rootless,可稍后关闭 rootful 守护进程。
三、配置 Rootless Docker
方式一:使用安装脚本(推荐)
以普通用户身份运行:
1 | dockerd-rootless-setuptool.sh install |
该脚本会生成 ~/.config/systemd/user/docker.service 并提示使用 systemctl --user 来管理 rootless Docker,并建议启用 linger。
方式二:官方 convenience script(次选)
1 | curl -fsSL https://get.docker.com/rootless | sh |
也会配置 rootless 环境并提示设置用户服务等
四、系统设置与服务管理
启用 linger 模式,让 Docker 用户服务在无登录时仍可持续运行:
1
loginctl enable-linger $(whoami)
将以下内容写入
~/.bashrc并使其生效:1
2
3export XDG_RUNTIME_DIR=/run/user/$(id -u)
export DOCKER_HOST=unix://$XDG_RUNTIME_DIR/docker.sock
export PATH=/usr/bin:$PATH然后运行
source ~/.bashrc检查 rootless docker 用户服务:
1
systemctl --user status docker
应显示
Active: active (running)
五、测试 Rootless Docker
1 | docker run -it --rm nginx:alpine sh -c 'echo container UID: $(id -u)' |
输出应为 0(容器内的 root)。
宿主机上查看相关进程 UID,应为高 UID(不是 root 或用户正常 UID)说明映射成功。
六、常见问题与注意事项
- SELinux:Rocky 9 默认启用 SELinux,可能影响 rootful/docker 安装。部分社区称 docker-ce 在 Rocky 9 上不稳定,推荐优先考虑 Podman 。
- cgroup v2 支持限制:rootless 模式在资源限制上依赖 cgroup v2,重启后可能需要手动 reload systemd + 重启用户服务以恢复资源限制能力。
- 根端口绑定:rootless 用户无法绑定 1024 以下端口。如需监听低端口,可使用
socat或设置CAP_NET_BIND_SERVICE能力。 - Podman 替代方案:Podman 在 Rocky 9 上原生支持,daemonless、rootless-by-default 更加安全,兼容 Docker CLI 语法,是推荐的替代选择 。
总结建议
- 优先使用 Podman:更适合 Rocky Linux 架构,支持 rootless 无痛部署,社区支持更佳。
- 如坚持使用 Docker Rootless:确保满足前提条件,使用
dockerd-rootless-setuptool.sh install,并妥善处理 SELinux 和 cgroup 限制。 - 系统升级时重新验证 rootless 安装状态,确保环境变量和用户服务配置一致。