無法在 Debian 11 Bullseye 上啟動非特權 LXC 容器
我已經重新安裝了 Debian 11。關於 LXC,我複制了我的 Debian 10 電腦的工作設置。我使用一個單獨的使用者,
lxcuser
我su
要,lxc-start
。配置,
~/.config/lxc/default.conf
lxc.idmap = u 0 165536 65536 lxc.idmap = g 0 165536 65536 lxc.apparmor.profile = unconfined lxc.mount.auto = proc:mixed sys:ro cgroup:mixed lxc.net.0.type = veth lxc.net.0.link = lxcbr0 lxc.net.0.flags = up lxc.net.0.hwaddr = 00:FF:xx:xx:xx:xx #lxc.include = /etc/lxc/default.conf
文件系統權限是使用 ACL 設置的,就像我在之前的設置中所做的那樣。
lxc-checkconfig
LXC version 4.0.6 Kernel configuration not found at /proc/config.gz; searching... Kernel configuration found at /boot/config-5.10.0-7-amd64 --- Namespaces --- Namespaces: enabled Utsname namespace: enabled Ipc namespace: enabled Pid namespace: enabled User namespace: enabled Network namespace: enabled --- Control groups --- Cgroups: enabled Cgroup v1 mount points: Cgroup v2 mount points: /sys/fs/cgroup Cgroup v1 systemd controller: missing Cgroup v1 freezer controller: missing Cgroup namespace: required Cgroup device: enabled Cgroup sched: enabled Cgroup cpu account: enabled Cgroup memory controller: enabled Cgroup cpuset: enabled --- Misc --- Veth pair device: enabled, not loaded Macvlan: enabled, not loaded Vlan: enabled, not loaded Bridges: enabled, loaded Advanced netfilter: enabled, loaded CONFIG_NF_NAT_IPV4: missing CONFIG_NF_NAT_IPV6: missing CONFIG_IP_NF_TARGET_MASQUERADE: enabled, not loaded CONFIG_IP6_NF_TARGET_MASQUERADE: enabled, not loaded CONFIG_NETFILTER_XT_TARGET_CHECKSUM: enabled, not loaded CONFIG_NETFILTER_XT_MATCH_COMMENT: enabled, not loaded FUSE (for use with lxcfs): enabled, loaded --- Checkpoint/Restore --- checkpoint restore: enabled CONFIG_FHANDLE: enabled CONFIG_EVENTFD: enabled CONFIG_EPOLL: enabled CONFIG_UNIX_DIAG: enabled CONFIG_INET_DIAG: enabled CONFIG_PACKET_DIAG: enabled CONFIG_NETLINK_DIAG: enabled File capabilities: Note : Before booting a new kernel, you can check its configuration usage : CONFIG=/path/to/config /usr/bin/lxc-checkconfig
使用調試選項執行後,我想我已經確定了以下幾行的錯誤:
DEBUG cgfsng - cgroups/cgfsng.c:cgfsng_monitor_create:1355 - Failed to create cgroup "(null)" WARN cgfsng - cgroups/cgfsng.c:mkdir_eexist_on_last:1152 - Permission denied - Failed to create directory "/sys/fs/cgroup/user.slice/user-1000.slice/session-1.scope/lxc.monitor.arch"
更改目錄的權限
/sys/fs/cgroup/user.slice/user-1000.slice/session-1.scope
無效;usingsudo
也不能在那裡寫。我相信問題是由於
cgroupv2
Debian 11 預設啟用的。我嘗試了我在網上找到的各種方法作為解決方法,到目前為止沒有任何效果。有任何想法嗎?要麼讓非特權 LXC 與 cgroupv2 一起工作,要麼在 Debian 11 上禁用 cgroupv2 並啟用 cgroupv1(或模仿 Debian 10 的 cgroup 設置)。當然歡迎其他解決方案!
一些連結:
我的部落格關於我如何在 Debian 10 上設置非特權 LXC,複製了設置
**更新:**添加
systemd.unified_cgroup_hierarchy=false systemd.legacy_systemd_cgroup_controller=false"
到核心參數有助於啟動容器。但我仍然從容器內部收到此錯誤:Arch Linux:
Welcome to Arch Linux! Failed to create /init.scope control group: Permission denied Failed to allocate manager object: Permission denied [!!!!!!] Failed to allocate manager object. Exiting PID 1...
8美分:
Welcome to CentOS Linux 8! Failed to read AF_UNIX datagram queue length, ignoring: No such file or directory Failed to install release agent, ignoring: No such file or directory Failed to create /init.scope control group: Permission denied Failed to allocate manager object: Permission denied [!!!!!!] Failed to allocate manager object, freezing. Freezing execution.
Debian Bullseye LXC 軟體包的最後一個版本(2021 年 6 月 11 日星期五的 1:4.0.6-2)最近對使用 cgroup v2 和 LXC 4.x 在 Debian 11 中啟動非特權容器的變化發出了警告:
lxc (1:4.0.6-2) 不穩定;緊急=中等
- 通過
lxc-unpriv-start
andlxc-unpriv-attach
命令提供了一種處理非特權容器啟動和連接的新方法。有關
/usr/share/doc/lxc/README.Debian.gz
更多詳細資訊,請參閱。– Pierre-Elliott Bécue peb@debian.org 2021 年 6 月 11 日星期五 15:12:15 +0200
自述文件中的第一部分似乎已由 OP 解決。OP 問題的相關部分在7) 啟動容器:
- 啟動容器
在統一的組層次結構下(從 Debian 11/bullseye 開始的 systemd 中的預設設置),非 root 使用者需要 lxc-start 才能擁有一些額外的權限才能以非 root 使用者身份啟動容器。最簡單的方法是通過 systemd。您可以通過設置
Delegate=true
屬性的使用者定義服務啟動容器,也可以使用系統執行顯式執行此操作:$ systemd-run --scope --quiet --user --property=Delegate=yes \ lxc-start -n mycontainer
或者,最後,您可以使用 Debian 提供的幫助腳本:
lxc-unpriv-start
. 它將關心正確使用該systemd-run
命令並確保正確設置所需的環境變數。“3)權限檢查”部分也值得一提(使用正確的值來適應):
$ setfacl --modify user:100000:x . .local .local/share
systemd 或 Debian 包裝器的範例:
$ lxc-create -n busybox-amd64 -t busybox $ lxc-start -n busybox-amd64 lxc-start: busybox-amd64: lxccontainer.c: wait_on_daemonized_start: 859 Received container state "ABORTING" instead of "RUNNING" lxc-start: busybox-amd64: tools/lxc_start.c: main: 308 The container failed to start lxc-start: busybox-amd64: tools/lxc_start.c: main: 311 To get more details, run the container in foreground mode lxc-start: busybox-amd64: tools/lxc_start.c: main: 313 Additional information can be obtained by setting the --logfile and --logpriority options $ systemd-run --scope --quiet --user --property=Delegate=yes lxc-start -n busybox-amd64 $ lxc-ls --active busybox-amd64 $ lxc-stop -n busybox-amd64 $ lxc-unpriv-start -n busybox-amd64 Running scope as unit: run-r1c8a4b4fd0294f688f9f63069414fbf0.scope $ lxc-ls --active busybox-amd64
此資訊以前只是隱藏在一些錯誤報告中,並且有些難以整理:
筆記:
當然,這成功地啟動了真正的作業系統(Debian、CentOS …)也是一樣的。
作為旁注且與此 Q/A 無關,**今天(2021-06-26)**使用下載模板,它似乎
hkp://pool.sks-keyservers.net
已停止服務。要創建模板,我必須首先這樣做以覆蓋以下預設密鑰伺服器 URL/usr/share/lxc/templates/lxc-download
:$ export DOWNLOAD_KEYSERVER=hkp://keys.openpgp.org $ lxc-create -n centos8-amd64 -t download -- --d centos -r 8 -a amd64 [...] You just created a Centos 8 x86_64 (20210626_07:08) container.