$ journalctl -f -u lxc@container1
Mär 10 20:32:42 vm-debian systemd[1]: [email protected]: Control process exited, code=exited, status=1/FAILURE
Mär 10 20:32:42 vm-debian lxc-unpriv-start[485]: Can't start an unprivileged container on a pure CGroups v2 host without a systemd user session running.
Mär 10 20:32:42 vm-debian lxc-unpriv-start[485]: If you are trying to get a non-interactive user to have unprivileged containers running, you need to
Mär 10 20:32:42 vm-debian lxc-unpriv-start[485]: enable lingering sessions for that user, via loginctl enable-linger lxcuser as root.
Mär 10 20:32:42 vm-debian systemd[1]: [email protected]: Failed with result 'exit-code'.
Mär 10 20:32:42 vm-debian systemd[1]: Failed to start LXC container container1.
基本解决方案
好的,经过几个不眠之夜,我最终为每个容器创建了一个简单的 systemd 单元文件。一个示例可能如下所示:
这是对此处发布的建议以及我在上面已经链接的答案
Delegate=yes
中的简单跟进。不需要用户逗留(此处提到)。
这个解决方案的一个很好的副作用是关闭(非特权)容器不再延迟主机关闭(如此处所述),因为使用
/usr/bin/lxc-stop -n my-container-name
定义ExecStop
而不是发送信号。调优 - Systemd 模板
感谢systemd 模板单元文件,可以对所有容器使用单个 unif 文件。我的最终模板单元文件如下所示:
由于我命名了文件
[email protected]
并将其放置到/etc/systemd/system/
我可以使用控制我的所有容器systemctl COMMAND [email protected]
(请注意,
lxc.service
是原创者,负责lxc-autostart
)欢迎对单元文件等进行任何改进!- 因为我不是专家,我基本上使用了官方文档和这个很好的答案。
调优 - Systemd 用户服务
向前迈出的另一步是使用 Systemd 用户服务,因此在部署新容器时无需充当 root。
单元文件会略有不同:
由于
multi-user.target
不可用于用户服务,我们必须default.target
改为使用。这次必须启用用户延迟,以便服务在启动时而不是在用户登录时启动。可以使用以下命令从 root 帐户启用延迟:
loginctl enable-linger <my-lxc-user>
我将服务文件保存到
.config/systemd/user/[email protected]
并使用systemctl --user enable [email protected]
我有 Debian 11.2 运行
lxc
(版本 4.0.11-1)的测试包。使用mprudek 的 systemd 单元(nano /etc/systemd/system/[email protected]
) 时,无论是否启用延迟会话,我总是会收到此错误:我已经按如下方式更新了 systemd 单元,它就像一个魅力。我的非特权 LXC 容器在该
lxcuser
帐户下运行。