安装rootless的docker

https://docker.website.cncfstack.com/engine/security/rootless/

rootless 模式可让您以非 root 用户身份运行 Docker 守护进程和容器,从而缓解守护进程和容器运行时中潜在的漏洞。

rootless 模式即使在安装 Docker 守护进程期间也不需要 root 权限,只要满足先决条件即可。

工作原理

rootless 模式在用户命名空间内运行 Docker 守护进程和容器。这与userns-remap模式类似,不同之处在于,在userns-remap模式下,守护进程本身是以 root 权限运行的;而在rootless 模式下,守护进程和容器均以非 root 权限运行。

rootless 模式不使用带有SETUID位或文件功能的二进制文件,但newuidmap和newgidmap除外,这些是允许在用户命名空间中使用多个 UID/GID 所必需的。

先决条件

您必须在主机上安装newuidmap并newgidmap。这些命令由大多数发行版上的uidmap软件包提供。

/etc/subuid/etc/subgid应包含至少 65,536 个用户的下级 UID/GID。在以下示例中,该用户testuser拥有 65,536 个下级 UID/GID(231072-296607)。

 id -u
1001
 whoami
testuser
 grep ^$(whoami): /etc/subuid
testuser:231072:65536
 grep ^$(whoami): /etc/subgid
testuser:231072:65536

脚本(见下文)会在先决条件不满足时自动显示帮助。

安装

Note 如果系统范围的 Docker 守护程序已在运行,请考虑将其禁用:

 sudo systemctl disable --now docker.service docker.socket
 sudo rm /var/run/docker.sock

https://gitea.cncfstack.com/docker/docker-install/raw/branch/master/rootless-install.sh

如果您选择不关闭docker服务和套接字,您将需要使用下一节中的–force参数。目前尚无已知问题,但在您关闭并禁用之前,您仍处于以 root 身份运行的 Docker 环境中。

With packages (RPM/DEB) Without packages If you installed Docker 20.10 or later with RPM/DEB packages, you should have dockerd-rootless-setuptool.sh in /usr/bin.

Run dockerd-rootless-setuptool.sh install as a non-root user to set up the daemon:

dockerd-rootless-setuptool.sh install [INFO] Creating /home/testuser/.config/systemd/user/docker.service … [INFO] Installed docker.service successfully. [INFO] To control docker.service, run: systemctl --user (start|stop|restart) docker.service [INFO] To run docker.service on system startup, run: sudo loginctl enable-linger testuser

[INFO] Creating CLI context “rootless” Successfully created context “rootless” [INFO] Using CLI context “rootless” Current context is now “rootless”

[INFO] Make sure the following environment variable(s) are set (or add them to ~/.bashrc): export PATH=/usr/bin:$PATH

[INFO] Some applications may require the following environment variable too: export DOCKER_HOST=unix:///run/user/1000/docker.sock 如果dockerd-rootless-setuptool.sh未显示,您可能需要手动安装docker-ce-rootless-extras软件包,例如:

sudo apt-get install -y docker-ce-rootless-extras 运行以确认客户端正在连接到rootless 守护进程:

docker info Client: Docker Engine - Community Version: 28.3.3 Context: rootless … Server: … Security Options: seccomp Profile: builtin rootless cgroupns … 如果遇到错误,请参阅故障排除。