无根模式
无根模式允许以非 root 身份运行 Docker 守护进程和容器 user 来缓解守护进程中的潜在漏洞,以及 容器运行时。
无根模式即使在安装 Docker 守护程序,只要满足先决条件即可。
运作方式
无根模式在用户命名空间内执行 Docker 守护进程和容器。
这与userns-remap模式,除了
跟userns-remap模式中,守护进程本身以 root 权限运行,
而在无根模式下,守护进程和容器都在运行
root 权限。
无根模式不使用具有SETUID位或文件功能,
除了newuidmap和newgidmap,需要这些 API 才能允许多个
要在用户命名空间中使用的 UID/GID。
先决条件
您必须安装
newuidmap和newgidmap在主机上。这些命令 由uidmappackage 的 Package。/etc/subuid和/etc/subgid应至少包含 65,536 个 subordinate 用户的 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
特定于发行版的提示
提示
建议使用 Ubuntu 内核。
安装
dbus-user-session包(如果未安装)。跑sudo apt-get install -y dbus-user-session并重新登录。安装
uidmap包(如果未安装)。跑sudo apt-get install -y uidmap.如果在用户未直接登录的终端中运行,则需要安装
systemd-container跟sudo apt-get install -y systemd-container,然后使用命令sudo machinectl shell TheUser@.overlay2默认情况下启用 Storage Driver (特定于 Ubuntu 的内核补丁)。Ubuntu 24.04 及更高版本通过以下方式启用受限制的非特权用户命名空间 default,可防止非特权进程创建用户命名空间 除非 AppArmor 配置文件配置为允许程序使用 非特权用户命名空间。
如果安装
docker-ce-rootless-extras使用 deb 包 (apt-get install docker-ce-rootless-extras),然后是rootlesskit已与apparmordeb 包。有了这个 安装方法,无需添加任何手册 AppArmor 配置。如果您使用安装来安装无根 extras 脚本,则必须添加 AppArmor 配置文件rootlesskit手动地:创建并安装当前登录用户的 AppArmor 配置文件:
$ filename=$(echo $HOME/bin/rootlesskit | sed -e s@^/@@ -e s@/@.@g) $ cat <<EOF > ~/${filename} abi <abi/4.0>, include <tunables/global> "$HOME/bin/rootlesskit" flags=(unconfined) { userns, include if exists <local/${filename}> } EOF $ sudo mv ~/${filename} /etc/apparmor.d/${filename}重新启动 AppArmor。
$ systemctl restart apparmor.service
安装
dbus-user-session包(如果未安装)。跑sudo apt-get install -y dbus-user-session并重新登录。对于 Debian 10,请添加
kernel.unprivileged_userns_clone=1自/etc/sysctl.conf(或/etc/sysctl.d) 并运行sudo sysctl --system.Debian 11 不需要此步骤。对于 Debian 11,安装
fuse-overlayfs推荐。跑sudo apt-get install -y fuse-overlayfs. Debian 12 不需要此步骤。无根 docker 需要
slirp4netns大于v0.4.0(当vpnkit未安装)。 检查您是否有此$ slirp4netns --version如果您没有此
sudo apt-get install -y slirp4netns或下载最新版本。
安装
fuse-overlayfs推荐。跑sudo pacman -S fuse-overlayfs.加
kernel.unprivileged_userns_clone=1自/etc/sysctl.conf(或/etc/sysctl.d) 并运行sudo sysctl --system
对于 openSUSE 15 和 SLES 15,安装
fuse-overlayfs推荐。跑sudo zypper install -y fuse-overlayfs. 在 openSUSE Tumbleweed 上不需要此步骤。sudo modprobe ip_tables iptable_mangle iptable_nat iptable_filter是必需的。 其他发行版可能也需要这样做,具体取决于配置。已知可在 openSUSE 15 和 SLES 15 上运行。
对于 RHEL 8 和类似发行版,安装
fuse-overlayfs推荐。跑sudo dnf install -y fuse-overlayfs. 在 RHEL 9 和类似发行版上不需要此步骤。你可能需要
sudo dnf install -y iptables.
已知限制
- 仅支持以下存储驱动程序:
overlay2(仅当使用内核 5.11 或更高版本或 Ubuntu 风格的内核运行时)fuse-overlayfs(仅当使用内核 4.18 或更高版本运行时,并且fuse-overlayfs已安装)btrfs(仅当使用内核 4.18 或更高版本运行时,或者~/.local/share/docker挂载user_subvol_rm_allowed挂载选项)vfs
- 仅当使用 cgroup v2 和 systemd 运行时,才支持 Cgroup。请参阅限制资源。
- 不支持以下功能:
- AppArmor 应用程序
- 检查站
- 叠加网络
- 公开 SCTP 端口
- 要使用
ping命令,请参阅 路由 ping 数据包。 - 要公开特权 TCP/UDP 端口 (< 1024),请参阅公开特权端口。
IPAddress显示于docker inspect的命名空间位于 RootlessKit 的网络命名空间内。 这意味着 IP 地址无法从主机访问nsenter-ing 添加到 network 命名空间中。- 主机网络 (
docker run --net=host) 也位于 RootlessKit 中的命名空间中。 - 不支持将 NFS 挂载为 docker “data-root”。此限制并非特定于 rootless 模式。
安装
注意
如果系统范围的 Docker 守护进程已在运行,请考虑禁用它:
$ sudo systemctl disable --now docker.service docker.socket $ sudo rm /var/run/docker.sock如果您选择不关闭
dockerservice 和 socket 中,您需要使用--forceparameter 的 API 值。没有已知问题,但在您关闭并禁用之前,您是 仍在运行有根的 Docker。
如果您使用 RPM/DEB 软件包安装了 Docker 20.10 或更高版本,您应该具有dockerd-rootless-setuptool.sh在/usr/bin.
跑dockerd-rootless-setuptool.sh install作为非 root 用户来设置守护进程:
$ 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] Make sure the following environment variables are set (or add them to ~/.bashrc):
export PATH=/usr/bin:$PATH
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
如果您没有权限运行软件包管理器,例如apt-get和dnf,
请考虑使用 https://get.docker.com/rootless 上提供的安装脚本。
由于 static 软件包不适用于s390x,因此不支持s390x.
$ curl -fsSL https://get.docker.com/rootless | sh
...
[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] Make sure the following environment variables are set (or add them to ~/.bashrc):
export PATH=/home/testuser/bin:$PATH
export DOCKER_HOST=unix:///run/user/1000/docker.sock
Binaries将安装在~/bin.
如果您遇到错误,请参阅故障排除。
卸载
要删除 Docker 守护进程的 systemd 服务,请运行dockerd-rootless-setuptool.sh uninstall:
$ dockerd-rootless-setuptool.sh uninstall
+ systemctl --user stop docker.service
+ systemctl --user disable docker.service
Removed /home/testuser/.config/systemd/user/default.target.wants/docker.service.
[INFO] Uninstalled docker.service
[INFO] This uninstallation tool does NOT remove Docker binaries and data.
[INFO] To remove data, run: `/usr/bin/rootlesskit rm -rf /home/testuser/.local/share/docker`
取消设置环境变量 PATH 并DOCKER_HOST如果您已将它们添加到~/.bashrc.
要删除数据目录,请运行rootlesskit rm -rf ~/.local/share/docker.
要删除Binaries,请删除docker-ce-rootless-extraspackage(如果您使用包管理器安装了 Docker)。
如果您使用 https://get.docker.com/rootless 安装了 Docker( Install without packages),
删除~/bin:
$ cd ~/bin
$ rm -f containerd containerd-shim containerd-shim-runc-v2 ctr docker docker-init docker-proxy dockerd dockerd-rootless-setuptool.sh dockerd-rootless.sh rootlesskit rootlesskit-docker-proxy runc vpnkit
用法
守护 进程
systemd 单元文件安装为~/.config/systemd/user/docker.service.
用systemctl --user要管理守护程序的生命周期,请执行以下作:
$ systemctl --user start docker
要在系统启动时启动守护程序,请启用 systemd 服务并持续:
$ systemctl --user enable docker
$ sudo loginctl enable-linger $(whoami)
将无根 Docker 作为 systemd 范围的服务 (/etc/systemd/system/docker.service)
不受支持,即使使用User=命令。
要在没有 systemd 的情况下直接运行守护进程,您需要运行dockerd-rootless.sh而不是dockerd.
必须设置以下环境变量:
$HOME:主目录$XDG_RUNTIME_DIR:仅可由预期用户访问的临时目录,例如~/.docker/run. 应在每次主机关闭时删除该目录。 该目录可以位于 tmpfs 上,但不应位于/tmp. 在/tmp可能容易受到 TOCTOU 攻击。
关于目录路径的备注:
- 套接字路径设置为
$XDG_RUNTIME_DIR/docker.sock默认情况下。$XDG_RUNTIME_DIR通常设置为/run/user/$UID. - data dir 设置为
~/.local/share/docker默认情况下。 数据目录不应位于 NFS 上。 - 守护进程配置目录设置为
~/.config/docker默认情况下。 此目录不同于~/.docker供客户端使用。
客户
您需要显式指定套接字路径或 CLI 上下文。
要使用$DOCKER_HOST:
$ export DOCKER_HOST=unix://$XDG_RUNTIME_DIR/docker.sock
$ docker run -d -p 8080:80 nginx
要使用 CLI 上下文docker context:
$ docker context use rootless
rootless
Current context is now "rootless"
$ docker run -d -p 8080:80 nginx
最佳实践
Docker 中的无根 Docker
要在 “rootful” Docker 中运行无根 Docker,请使用docker:<version>-dind-rootlessimage 而不是docker:<version>-dind.
$ docker run -d --name dind-rootless --privileged docker:25.0-dind-rootless
这docker:<version>-dind-rootlessimage 以非 root 用户 (UID 1000) 身份运行。
然而--privileged是禁用 seccomp、AppArmor 和 mount 所必需的
面具。
通过 TCP 暴露 Docker API 套接字
要通过 TCP 公开 Docker API 套接字,您需要启动dockerd-rootless.sh跟DOCKERD_ROOTLESS_ROOTLESSKIT_FLAGS="-p 0.0.0.0:2376:2376/tcp".
$ DOCKERD_ROOTLESS_ROOTLESSKIT_FLAGS="-p 0.0.0.0:2376:2376/tcp" \
dockerd-rootless.sh \
-H tcp://0.0.0.0:2376 \
--tlsverify --tlscacert=ca.pem --tlscert=cert.pem --tlskey=key.pem
通过 SSH 公开 Docker API 套接字
要通过 SSH 公开 Docker API 套接字,您需要确保$DOCKER_HOST在远程主机上设置。
$ ssh -l <REMOTEUSER> <REMOTEHOST> 'echo $DOCKER_HOST'
unix:///run/user/1001/docker.sock
$ docker -H ssh://<REMOTEUSER>@<REMOTEHOST> run ...
路由 ping 数据包
在某些发行版上,ping默认情况下不起作用。
加net.ipv4.ping_group_range = 0 2147483647自/etc/sysctl.conf(或/etc/sysctl.d) 并运行sudo sysctl --system以允许使用ping.
公开特权端口
要公开特权端口(< 1024),请将CAP_NET_BIND_SERVICEupperrootlesskitbinary 并重新启动守护程序。
$ sudo setcap cap_net_bind_service=ep $(which rootlesskit)
$ systemctl --user restart docker
或添加net.ipv4.ip_unprivileged_port_start=0自/etc/sysctl.conf(或/etc/sysctl.d) 并运行sudo sysctl --system.
限制资源
使用 cgroup 相关的docker run标志,例如--cpus,--memory,--pids-limit仅在使用 cgroup v2 和 systemd 运行时受支持。
请参阅更改 cgroup 版本以启用 cgroup v2。
如果docker info显示none如Cgroup Driver,则不满足条件。
当这些条件不满足时,无根模式会忽略与 cgroup 相关的docker run标志。
有关解决方法,请参阅在没有 cgroup 的情况下限制资源。
如果docker info显示systemd如Cgroup Driver,则满足条件。
但是,通常只有memory和pids默认情况下,控制器被委托给非 root 用户。
$ cat /sys/fs/cgroup/user.slice/user-$(id -u).slice/user@$(id -u).service/cgroup.controllers
memory pids
要允许委派所有控制器,您需要更改 systemd 配置,如下所示:
# mkdir -p /etc/systemd/system/user@.service.d
# cat > /etc/systemd/system/user@.service.d/delegate.conf << EOF
[Service]
Delegate=cpu cpuset io memory pids
EOF
# systemctl daemon-reload
注意
委派
cpuset需要 systemd 244 或更高版本。
在没有 cgroup 的情况下限制资源
即使 cgroup 不可用,您仍然可以使用传统的ulimit和cpulimit,
尽管它们在流程粒度而不是容器粒度中工作,
并且可以由容器进程任意禁用。
例如:
要将 CPU 使用率限制为 0.5 个内核(类似于
docker run --cpus 0.5):docker run <IMAGE> cpulimit --limit=50 --include-children <COMMAND>要将最大 VSZ 限制为 64MiB(类似于
docker run --memory 64m):docker run <IMAGE> sh -c "ulimit -v 65536; <COMMAND>"将每个命名空间 UID 2000 的最大进程数限制为 100 (类似于
docker run --pids-limit=100):docker run --user 2000 --ulimit nproc=100 <IMAGE> <COMMAND>
故障 排除
当系统上存在 systemd 时,无法使用 systemd 进行安装
$ dockerd-rootless-setuptool.sh install
[INFO] systemd not detected, dockerd-rootless.sh needs to be started manually:
...
rootlesskit如果您通过sudo su.对于无法登录的用户,您必须使用machinectl命令,它是systemd-container包。安装后systemd-container切换到myuser使用以下命令:
$ sudo machinectl shell myuser@
哪里myuser@是您想要的用户名,@ 表示此计算机。
启动 Docker 守护程序时出错
[rootlesskit:parent] 错误:无法启动子项:fork/exec /proc/self/exe:不允许作
此错误主要发生在/proc/sys/kernel/unprivileged_userns_clone设置为 0:
$ cat /proc/sys/kernel/unprivileged_userns_clone
0
要修复此问题,请添加kernel.unprivileged_userns_clone=1自/etc/sysctl.conf(或/etc/sysctl.d) 并运行sudo sysctl --system.
[rootlesskit:parent] 错误:无法启动子项:fork/exec /proc/self/exe:设备上没有剩余空间
此错误主要发生在/proc/sys/user/max_user_namespaces太小:
$ cat /proc/sys/user/max_user_namespaces
0
要修复此问题,请添加user.max_user_namespaces=28633自/etc/sysctl.conf(或/etc/sysctl.d) 并运行sudo sysctl --system.
[rootlesskit:parent] 错误:无法设置 UID/GID 映射:无法计算 uid/gid 映射:未找到用户 1001 (“testuser”) 的 subuid 范围
此错误发生在/etc/subuid和/etc/subgid未配置。请参阅先决条件。
无法获取XDG_RUNTIME_DIR
此错误发生在$XDG_RUNTIME_DIR未设置。
在非 systemd 主机上,您需要创建一个目录,然后设置路径:
$ export XDG_RUNTIME_DIR=$HOME/.docker/xrd
$ rm -rf $XDG_RUNTIME_DIR
$ mkdir -p $XDG_RUNTIME_DIR
$ dockerd-rootless.sh
注意
每次注销时都必须删除该目录。
在 systemd 主机上,使用pam_systemd(见下文)。
该值自动设置为/run/user/$UID并在每次注销时进行清理。
systemctl --user失败并显示 “Failed to connect to bus: No such file or directory”
此错误主要发生在您使用sudo:
# sudo -iu testuser
$ systemctl --user start docker
Failed to connect to bus: No such file or directory
而不是sudo -iu <USERNAME>,您需要使用pam_systemd.例如:
- 通过 Graphic Console 登录
ssh <USERNAME>@localhostmachinectl shell <USERNAME>@
守护程序未自动启动
你需要sudo loginctl enable-linger $(whoami)使守护程序能够启动
自动启动。请参阅用法。
iptables 失败:iptables -t nat -N DOCKER:致命:无法打开锁定文件 /run/xtables.lock:权限被拒绝
在主机上启用 SELinux 时,旧版本的 Docker 可能会发生此错误。
此问题已在 Docker 20.10.8 中修复。
旧版本 Docker 的已知解决方法是运行以下命令来禁用 SELinuxiptables:
$ sudo dnf install -y policycoreutils-python-utils && sudo semanage permissive -a iptables_t
docker pull错误
docker: 注册层失败: 处理 tar 文件时出错(退出状态 1): lchown <FILE>: 参数无效
当/etc/subuid或/etc/subgid是不够的。所需的条目数因而异
镜像。但是,对于大多数镜像,65,536 个条目就足够了。请参阅先决条件。
docker: 注册层失败: ApplyLayer 退出状态 1 stdout: stderr: lchown <FILE>: 不允许作
此错误主要在以下情况下发生~/.local/share/docker位于 NFS 上。
解决方法是指定非 NFSdata-root目录中的~/.config/docker/daemon.json如下:
{"data-root":"/somewhere-out-of-nfs"}docker run错误
docker:来自守护程序的错误响应:OCI 运行时创建失败:...:读取 unix @->/run/systemd/private:读取:对等连接重置:未知。
此错误主要发生在 cgroup v2 主机上,当 dbus 守护程序未为用户运行时。
$ systemctl --user is-active dbus
inactive
$ docker run hello-world
docker: Error response from daemon: OCI runtime create failed: container_linux.go:380: starting container process caused: process_linux.go:385: applying cgroup configuration for process caused: error while starting unit "docker
-931c15729b5a968ce803784d04c7421f791d87e5ca1891f34387bb9f694c488e.scope" with properties [{Name:Description Value:"libcontainer container 931c15729b5a968ce803784d04c7421f791d87e5ca1891f34387bb9f694c488e"} {Name:Slice Value:"use
r.slice"} {Name:PIDs Value:@au [4529]} {Name:Delegate Value:true} {Name:MemoryAccounting Value:true} {Name:CPUAccounting Value:true} {Name:IOAccounting Value:true} {Name:TasksAccounting Value:true} {Name:DefaultDependencies Val
ue:false}]: read unix @->/run/systemd/private: read: connection reset by peer: unknown.
要修复此问题,请运行sudo apt-get install -y dbus-user-session或sudo dnf install -y dbus-daemon,然后重新登录。
如果错误仍然存在,请尝试运行systemctl --user enable --now dbus(不带 sudo)。
--cpus,--memory和--pids-limit被忽略
这是 cgroup v1 模式下的预期行为。 要使用这些标志,需要将主机配置为启用 cgroup v2。 有关更多信息,请参阅限制资源。
网络错误
本节提供无根模式下联网的故障排除提示。
通过网络和端口驱动程序支持无根模式下的联网 RootlessKit 的 Rootless Kit 中。网络性能和特性取决于组合 使用网络和端口驱动程序。如果您遇到意外行为 或与网络相关的性能,请查看下表,其中显示了 RootlessKit 支持的配置,以及它们的比较:
| 网络驱动程序 | 端口驱动程序 | 净吞吐量 | 端口吞吐量 | 源 IP 传播 | 无 SUID | 注意 |
|---|---|---|---|---|---|---|
slirp4netns | builtin | 慢 | 快 ✅ | ❌ | ✅ | 典型设置中的默认值 |
vpnkit | builtin | 慢 | 快 ✅ | ❌ | ✅ | 默认slirp4netns未安装 |
slirp4netns | slirp4netns | 慢 | 慢 | ✅ | ✅ | |
pasta | implicit | 慢 | 快 ✅ | ✅ | ✅ | 实验的;需要意大利面版本 2023_12_04 或更高版本 |
lxc-user-nic | builtin | 快 ✅ | 快 ✅ | ❌ | ❌ | 实验的 |
bypass4netns | bypass4netns | 快 ✅ | 快 ✅ | ✅ | ✅ | 注意:未集成到 RootlessKit,因为它需要自定义 seccomp 配置文件 |
有关排查特定网络问题的信息,请参阅:
docker run -p失败cannot expose privileged port- Ping 不起作用
IPAddress显示于docker inspect无法访问--net=host不侦听主机网络命名空间上的端口- 网络速度慢
docker run -p不传播源 IP 地址
docker run -p失败cannot expose privileged port
docker run -p将特权端口 (< 1024) 指定为主机端口时,失败并显示此错误。
$ docker run -p 80:80 nginx:alpine
docker: Error response from daemon: driver failed programming external connectivity on endpoint focused_swanson (9e2e139a9d8fc92b37c36edfa6214a6e986fa2028c0cc359812f685173fa6df7): Error starting userland proxy: error while calling PortManager.AddPort(): cannot expose privileged port 80, you might need to add "net.ipv4.ip_unprivileged_port_start=0" (currently 1024) to /etc/sysctl.conf, or set CAP_NET_BIND_SERVICE on rootlesskit binary, or choose a larger port number (>= 1024): listen tcp 0.0.0.0:80: bind: permission denied.
遇到此错误时,请考虑改用非特权端口。例如,8080 而不是 80。
$ docker run -p 8080:80 nginx:alpine
要允许公开特权端口,请参阅公开特权端口。
Ping 不起作用
Ping 在以下情况下不起作用/proc/sys/net/ipv4/ping_group_range设置为1 0:
$ cat /proc/sys/net/ipv4/ping_group_range
1 0
有关详细信息,请参阅路由 ping 数据包。
IPAddress显示于docker inspect无法访问
这是预期行为,因为守护进程位于 RootlessKit 的
network 命名空间。用docker run -p相反。
--net=host不侦听主机网络命名空间上的端口
这是预期行为,因为守护进程位于 RootlessKit 的
network 命名空间。用docker run -p相反。
网络速度慢
如果安装了 slirp4netns v0.4.0 或更高版本,则无根模式的 Docker 使用 slirp4netns 作为默认网络堆栈。 如果未安装 slirp4netns,Docker 将回退到 VPNKit。 安装 slirp4netns 可以提高网络吞吐量。
有关 RootlessKit 网络驱动程序的更多信息,请参阅 RootlessKit 文档。
此外,更改 MTU 值可能会提高吞吐量。
可以通过创建~/.config/systemd/user/docker.service.d/override.conf包含以下内容:
[Service]
Environment="DOCKERD_ROOTLESS_ROOTLESSKIT_MTU=<INTEGER>"然后重新启动守护进程:
$ systemctl --user daemon-reload
$ systemctl --user restart docker
docker run -p不传播源 IP 地址
这是因为无根模式下的 Docker 使用 RootlessKit 的builtin港口
driver,它不支持源 IP 传播。要启用
源 IP 传播,您可以:
- 使用
slirp4netnsRootlessKit 端口驱动程序 - 使用
pastaRootlessKit 网络驱动程序,使用implicit端口驱动程序
这pasta网络驱动程序是实验性的,但提供了更高的吞吐量
性能与slirp4netnsport 驱动程序。这pasta司机
需要 Docker Engine 版本 25.0 或更高版本。
要更改 RootlessKit 网络配置,请执行以下作:
在
~/.config/systemd/user/docker.service.d/override.conf.添加以下内容,具体取决于您要使用的配置:
slirp4netns[Service] Environment="DOCKERD_ROOTLESS_ROOTLESSKIT_NET=slirp4netns" Environment="DOCKERD_ROOTLESS_ROOTLESSKIT_PORT_DRIVER=slirp4netns"pasta网络驱动程序与implicit端口驱动程序[Service] Environment="DOCKERD_ROOTLESS_ROOTLESSKIT_NET=pasta" Environment="DOCKERD_ROOTLESS_ROOTLESSKIT_PORT_DRIVER=implicit"
重新启动守护进程:
$ systemctl --user daemon-reload $ systemctl --user restart docker
有关 RootlessKit 的联网选项的更多信息,请参阅:
调试提示
进入dockerd命名空间
这dockerd-rootless.sh脚本执行dockerd在其自己的 user、mount 和 network 命名空间中。
对于调试,您可以通过运行nsenter -U --preserve-credentials -n -m -t $(cat $XDG_RUNTIME_DIR/docker.pid).