以非 root 用户身份运行 Docker 守护进程(Rootless 模式)
无根模式允许以非 root 用户身份运行 Docker 守护进程和容器,以减轻守护进程和容器运行时中的潜在漏洞。
Rootless 模式即使在安装 Docker 守护进程期间也不需要 root 权限,只要 满足先决条件即可。
怎么运行的
无根模式在用户命名空间内执行 Docker 守护进程和容器。这与userns-remap
mode非常相似
,不同之处在于,在userns-remap
mode 下,守护进程本身以 root 权限运行,而在 rootless 模式下,守护进程和容器都在没有 root 权限的情况下运行。
无根模式不使用具有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
特定于发行版的提示
提示
我们建议您使用 Ubuntu 内核。
dbus-user-session
如果未安装则安装包。运行sudo apt-get install -y dbus-user-session
并重新登录。overlay2
默认情况下启用存储驱动程序( Ubuntu 特定的内核补丁)。Ubuntu 24.04 及更高版本默认启用受限制的非特权用户命名空间,这会阻止非特权进程创建用户命名空间,除非将 AppArmor 配置文件配置为允许程序使用非特权用户命名空间。
如果您
docker-ce-rootless-extras
使用 deb 软件包 (apt-get install docker-ce-rootless-extras
) 安装,则 AppArmor 配置文件rootlesskit
已与apparmor
deb 软件包捆绑在一起。使用这种安装方法,您不需要添加任何手动的AppArmor配置。但是,如果您使用安装脚本安装无根附加组件 ,则必须手动添加 AppArmor 配置文件rootlesskit
:将 AppArmor 配置文件添加到
/etc/apparmor.d/usr.local.bin.rootlesskit
:$ cat <<EOF > /etc/apparmor.d/$(echo $HOME/bin/rootlesskit | sed -e s@^/@@ -e s@/@.@g) abi <abi/4.0>, include <tunables/global> $HOME/bin/rootlesskit flags=(unconfined) { userns, include if exists <local/$(echo $HOME/bin/rootlesskit | sed -e s@^/@@ -e s@/@.@g)> } EOF
重新启动 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 上不需要此步骤。fuse-overlayfs
建议安装。运行sudo apt-get install -y fuse-overlayfs
。也可以将overlay2
存储驱动程序与 Debian 特定的 modprobe 选项一起使用sudo modprobe overlay permit_mounts_in_userns=1
,但由于 不稳定,强烈建议不要这样做。Rootless 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
fuse-overlayfs
建议安装。运行sudo zypper install -y fuse-overlayfs
。sudo modprobe ip_tables iptable_mangle iptable_nat iptable_filter
是必须的。根据配置,其他发行版可能也需要这样做。已知可在 openSUSE 15 和 SLES 15 上运行。
fuse-overlayfs
建议安装。运行sudo dnf install -y fuse-overlayfs
。你可能需要
sudo dnf install -y iptables
。已知可在 CentOS 8、RHEL 8 和 Fedora 34 上运行。
添加
user.max_user_namespaces=28633
到/etc/sysctl.conf
(或/etc/sysctl.d
) 并运行sudo sysctl --system
。systemctl --user
默认情况下不起作用。无需systemd直接运行dockerd-rootless.sh
。
已知的限制
- 仅支持以下存储驱动程序:
overlay2
(仅当使用内核 5.11 或更高版本或 Ubuntu 风格的内核运行时)fuse-overlayfs
(仅当运行内核 4.18 或更高版本并fuse-overlayfs
已安装时)btrfs
(仅当使用内核 4.18 或更高版本运行,或者使用mount 选项~/.local/share/docker
安装时)user_subvol_rm_allowed
vfs
- 仅当与 cgroup v2 和 systemd 一起运行时才支持 Cgroup。请参阅 限制资源。
- 不支持以下功能:
- 应用装甲
- 检查站
- 覆盖网络
- 暴露 SCTP 端口
- 要使用该
ping
命令,请参阅 路由 ping 数据包。 - 要公开特权 TCP/UDP 端口 (< 1024),请参阅 公开特权端口。
IPAddress
所示的docker inspect
命名空间位于 RootlessKit 的网络命名空间内。这意味着如果不nsenter
进入网络命名空间,则无法从主机访问 IP 地址。- 主机网络 (
docker run --net=host
) 也在 RootlessKit 内部命名。 - 不支持 docker“data-root”挂载 NFS。此限制并非特定于无根模式。
安装
笔记
如果系统范围的 Docker 守护进程已在运行,请考虑禁用它:
$ sudo systemctl disable --now docker.service docker.socket
如果您使用
RPM/DEB 软件包安装了 Docker 20.10 或更高版本,则应该dockerd-rootless-setuptool.sh
具有/usr/bin
.
以非 root 用户身份运行dockerd-rootless-setuptool.sh install
来设置守护进程:
$ 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
和等包管理器,请考虑使用https://get.docker.com/rootlessdnf
上提供的安装脚本
。由于静态包不可用于,因此它不支持。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
二进制文件将安装在~/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
.
要删除二进制文件,docker-ce-rootless-extras
如果您使用包管理器安装了 Docker,请删除包。如果您使用
https://get.docker.com/rootless安装了 Docker (
不带软件包安装),请删除以下二进制文件~/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)
/etc/systemd/system/docker.service
即使使用该指令,也不支持将 Rootless Docker 作为系统范围的服务 ( ) 启动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
。~/.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 中运行 Rootless Docker,请使用该docker:<version>-dind-rootless
映像而不是docker:<version>-dind
.
$ docker run -d --name dind-rootless --privileged docker:25.0-dind-rootless
该docker:<version>-dind-rootless
映像以非 root 用户 (UID 1000) 身份运行。但是,--privileged
需要禁用 seccomp、AppArmor 和安装掩码。
通过 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_SERVICE
为rootlesskit
二进制并重新启动守护程序。
$ sudo setcap cap_net_bind_service=ep $(which rootlesskit)
$ systemctl --user restart docker
或者添加net.ipv4.ip_unprivileged_port_start=0
到/etc/sysctl.conf
(or
/etc/sysctl.d
) 并运行sudo sysctl --system
。
资源有限
仅在使用 cgroup v2 和 systemd 运行时才支持使用 cgroup 相关docker run
标志(例如 、--cpus
、--memory
)限制资源。--pids-limit
请参阅
更改 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>
故障排除
启动 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
笔记
每次注销时都必须删除该目录。
pam_systemd
在 systemd 主机上,使用(见下文)登录主机。该值会在每次注销时自动设置/run/user/$UID
并清除。
systemctl --user
失败并显示“无法连接到总线:没有这样的文件或目录”
此错误主要发生在您使用以下命令从 root 用户切换到非 root 用户时sudo
:
# sudo -iu testuser
$ systemctl --user start docker
Failed to connect to bus: No such file or directory
您需要使用来代替sudo -iu <USERNAME>
登录pam_systemd
。例如:
- 通过图形控制台登录
ssh <USERNAME>@localhost
machinectl shell <USERNAME>@
守护进程不会自动启动
您需要sudo loginctl enable-linger $(whoami)
启用守护进程自动启动。请参阅
用法。
iptables 失败: iptables -t nat -N DOCKER:致命:无法打开锁定文件 /run/xtables.lock:权限被拒绝
当主机上启用 SELinux 时,旧版本的 Docker 可能会发生此错误。
该问题已在 Docker 20.10.8 中修复。旧版本 Docker 的一个已知解决方法是运行以下命令来禁用 SELinux iptables
:
$ sudo dnf install -y policycoreutils-python-utils && sudo semanage permissive -a iptables_t
docker 拉取错误
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 运行错误
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 中的网络和端口驱动程序支持无根模式下的网络连接。网络性能和特性取决于您使用的网络和端口驱动程序的组合。如果您遇到与网络相关的意外行为或性能,请查看下表,其中显示了 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 失败并无法公开特权端口
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 不通
/proc/sys/net/ipv4/ping_group_range
设置为以下情况时 Ping 不起作用1 0
:
$ cat /proc/sys/net/ipv4/ping_group_range
1 0
具体请参见 路由Ping报文。
docker检查中显示的IP地址无法访问
这是预期的行为,因为守护进程在 RootlessKit 的网络命名空间内命名。代替使用docker run -p
。
--net=host 不监听主机网络命名空间上的端口
这是预期的行为,因为守护进程在 RootlessKit 的网络命名空间内命名。代替使用docker run -p
。
网络很慢
如果安装了 slirp4netns v0.4.0 或更高版本,则具有 rootless 模式的 Docker 使用 slirp4netns作为默认网络堆栈。如果未安装 slirp4netns,Docker 将回退到 VPNKit。安装 slirp4netns 可以提高网络吞吐量。
有关 RootlessKit 网络驱动程序的更多信息,请参阅 RootlessKit 文档。
此外,更改 MTU 值可能会提高吞吐量。 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 地址
这是因为 Rootless 模式下的 Dockerbuiltin
默认使用 RootlessKit 的端口驱动程序,不支持源 IP 传播。要启用源 IP 传播,您可以:
- 使用
slirp4netns
RootlessKit 端口驱动程序 - 使用
pasta
RootlessKit 网络驱动程序和implicit
端口驱动程序
该pasta
网络驱动程序是实验性的,但与端口驱动程序相比提供了改进的吞吐量性能slirp4netns
。该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
在其自己的用户、安装和网络命名空间中执行。
为了进行调试,您可以通过运行来输入命名空间
nsenter -U --preserve-credentials -n -m -t $(cat $XDG_RUNTIME_DIR/docker.pid)
。