Linux 非 root 运行 Docker:rootless mode
Docker rootless 是一种在非特权模式下运行 Docker 守护进程的方式,它允许用户以非 root 用户管理 Docker 守护进程和容器,以降低潜在的安全漏洞风险
介绍
- docker rootless 特性于 2019.7.22 的 v19.03.0 引入,2020.12.8 版本 v20.10.0 GA
- rootless 优点
- 以非 root 用户身份运行容器
- 限制容器的权限
- 限制容器能力
安装
- 以 ubuntu 22.04 为例
- 安装 dbus-user-session
sudo apt-get install -y dbus-user-session- 安装 uidmap:让 Docker 守护进程运行在重映射的用户名空间中
- subuid/subgid 最大范围
2,147,483,648即2^32-1(参考)
- subuid/subgid 最大范围
sudo apt-get install -y uidmap
# 安装后,自动生成如下信息
$ whoami
testuser
$ grep ^$(whoami): /etc/subuid
testuser:231072:65536
$ grep ^$(whoami): /etc/subgid
testuser:231072:65536- 下面定制 subuids/subgids(可忽略)
- 解决错误
failed to Lchown "/path/to/xxx" for UID <uid>, GID <gid> (try increasing the number of subordinate IDs in /etc/subuid and /etc/subgid): lchown /path/to/xxx: invalid argument
- 解决错误
sudo touch /etc/sub{u,g}id
sudo usermod --add-subuids 10000-75535 $(whoami)
sudo usermod --add-subgids 10000-75535 $(whoami)- 安装 slirp4netns(rootless 支持的网络模式参考)
- slirp4netns(rootless User-mode networking for unprivileged network namespaces
sudo apt-get install -y slirp4netns- limit 配置
$ cat /etc/security/limits.conf
* soft nofile 10240
* hard nofile 10240- sysctl 配置
$ cat << EOT > /etc/sysctl.conf
user.max_user_namespaces = 28633
EOT
$ sysctl --system- 启用无特权 ping
$ cat /proc/sys/net/ipv4/ping_group_range
0 2000000
# 配置命令
sysctl -w "net.ipv4.ping_group_range=0 2000000"- 安装 rootless docker
curl -o rootless.sh -fsSL https://get.docker.com/rootless
# 替换国内源
sed -i 's+https://download.docker.com+https://mirrors.tuna.tsinghua.edu.cn/docker-ce+' rootless.sh
sh rootless.sh- 启动
systemctl --user start docker
systemctl --user enable docker
systemctl --user status docker
# To launch the daemon on system startup, enable the systemd service and lingering
sudo loginctl enable-linger $(whoami)-
相关配置文件
~/.config/docker/daemon.json
-
使用
export PATH=/usr/bin:$PATH
export XDG_RUNTIME_DIR=/run/user/$UID
export DOCKER_HOST=unix://$XDG_RUNTIME_DIR/docker.sock >> ~/.bashrc
或
docker context use rootless然后可以和正常使用 docker 相关命令