有没有办法在 lxc 特权容器中用普通用户运行 podman?

140 天前
 wniming

有这个需求是因为有时会把一台 linux 服务器(服务器 A)的硬盘全部拆下来装到另一台 linux 服务器(服务器 B )上临时使用(比如服务器 A 的有些硬件坏了要送去售后),又不想影响服务器 B 现有的功能,所以想到在服务器 B 上手动把服务器 A 的文件系统树 mount 到特定的目录,然后用特权 lxc 容器来运行服务器 A 的所有服务(直接指定特权 lxc 容器的 rootfs path 为自己手动挂载的服务器 A 的文件系统树),这种做法是可以做到服务器 A 的大部分服务都能在特权 lxc 容器内运行的(甚至包括用 libvirt 管理的虚拟机),但是服务器 A 上的用非特权 podman 运行的服务无法在特权 lxc 容器内运行,下面有个简单的例子:

d@server:~$ podman run -it --rm fedora:42
Error: crun: mount `proc` to `proc`: Operation not permitted: OCI permission denied

其实也不仅仅是 podman ,非特权的 docker 和非特权的 lxc 也都无法在特权 lxc 容器内运行。

估计很少有人有类似的需求,不过我确实很想这么用,自己研究大半天了没解决,希望有 v 友知道这个要怎么实现。

2968 次点击
所在节点    Linux
26 条回复
dode
135 天前
系统硬盘直接插在一个台式机上也能开机使用系统
pagxir
133 天前
特权容器需要用这个配置
lxc.mount.auto = cgroup:mixed:force proc:rw sys:rw cgroup-full:mixed:force

完整配置参见

https://build.cachefiles.net/2025/05/no-privi-lxc.html
wniming
133 天前
@pagxir #22

在我的环境下加上

lxc.mount.auto = cgroup:mixed:force proc:rw sys:rw cgroup-full:mixed:force

会导致特权容器启动失败,把 sys:rw 删掉可以启动成功,但是依然无法用普通用户运行 podman
wniming
133 天前
@pagxir #22 你的博客还是启发到我了,我的物理机系统是 fedora42 ,lxc 特权容器加上这行配置可以在容器内用普通用户运行 podman:

lxc.mount.entry = proc dev/.lxc/proc proc create=dir,optional 0 0
wniming
133 天前
@wniming #24 如果要在特权 lxc 容器内用普通用户运行 lxc 的话,要在特权 lxc 容器的配置上加上:

lxc.mount.entry = proc dev/.lxc/proc proc create=dir,optional 0 0
lxc.mount.entry = sys dev/.lxc/sys sysfs create=dir,optional 0 0
pagxir
133 天前
我没用 podman ,我的环境是 host 系统是 void linux 然后跑了特权 lxc 容器,特权容器里安装了 Ubuntu 带 kde 的图像环境,然后在普通用户下跑 lxc 容器(alpine, Ubuntu/noble, Ubuntu/bionic)。完全没有问题。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1129319

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX