我拥有的:
一台 Gentoo 主机和一个 Ubuntu 容器。
我想要的是:
从主机挂载/home
到容器并正常使用它。
我在做什么:
使用标志启动容器-U --bind=/home
。
我得到什么:
在容器中,我有我的/home
目录,但它已被挂载为无人:无组所有者:
scratch:5:0:/home/vkirsano> ll /home
total 24
drwxr-xr-x 3 nobody nogroup 4096 Sep 19 17:39 krokoziabla
drwx------ 2 nobody nogroup 16384 Oct 20 2016 lost+found
drwxr-xr-x 56 nobody nogroup 4096 Sep 20 22:15 vkirsano
因此,实际上我只能只读访问该/home
目录的内容,这不是我想要的。比如说,我在容器中创建了vkirsano
与主机中具有相同 UID:GID 的用户,因此我希望 systemd-nspawn 在绑定目录时仅保留有关文件所有权的原始信息。
我在问什么
安装文件夹的通常做法(如果有的话)是什么,例如/home
保持它们在容器中正常工作的能力?
答案1
AFAIK,-U
主要与 rw 不兼容--bind
。来自文档:
请注意,当此选项与--private-users 结合使用时,生成的挂载点将归nobody 用户所有。这是因为挂载及其文件和目录继续由相关主机用户和组拥有,而这些用户和组在容器中不存在,因此显示在通配符 UID 65534(nobody)下。如果创建了此类绑定安装,建议使用 --bind-ro= 将其设置为只读。
我使用 nspawn 制作基于 Ubuntu 的容器,以便在我的 Arch Linux 主机上构建 Yocto。当Arch的内核启用时CONFIG_USER_NS=y
,我需要PrivateUsers=off
在我的/etc/systemd/nspawn/foo.nspawn
文件中进行设置。 (此外,我在主机和容器中添加了具有相同 UID 的用户,因此我可以Bind=
在容器和主机中以相同的方式访问它。)