我观察到,su
当在嵌套在 Ubuntu LXD 容器中的 LXD Debian 容器中执行该命令时,该命令耗时过长(30 秒)。这种开销不会发生在未嵌套的 Debian 容器中,也不会发生在嵌套在 Ubuntu 容器中的 Ubuntu 容器中。有人对此有任何解释吗?接下来我将描述如何重现此问题。
设置
我已经在 Ubuntu 18.04 机器上设置了 LXD 容器以使用嵌套容器(如https://ubuntu.com/blog/nested-containers-in-lxd)。我使用系统 apt 包(lxd
和lxd-client
)来安装 LXD。然后,我创建了两个容器,如下所示:
lxc launch ubuntu:20.04 c1 -c security.nesting=true
lxc launch images:debian/10 c2
然后,在容器 c1 内部,我创建了两个嵌套容器:
lxd init
lxc launch ubuntu:20.04 c3
lxc launch images:debian/10 c4
在 Debian 容器中,我debian
使用以下命令创建了非 root 用户:
adduser --home /home/debian --gecos Debian --disabled-password debian
在 Ubuntu 容器中不需要创建非 root 用户,因为该ubuntu
用户已经定义。
su
测量需要多长时间
su
对于每个容器,我使用以下命令测量执行命令所需的时间(user
其中是ubuntu
或debian
):
time pwd
time su $user -c pwd
由于命令的开销,预计第二条命令会花费更多时间su
。在所有情况下,此开销约为 59 毫秒,但容器除外c4
(即 Ubuntu 容器内的 Debian 容器),其开销约为 30 秒。