現象:
在 Alpine Linux 中部署 LXD或者incus 服務后,創建 容器或者虛擬機時提示 實例啟動失敗、退出代碼為1:
查詢啟動日志后,發現是 cgroup 掛載失敗導致了 container 拉起失敗。
原因分析:
從啟動日志上看,是 cgroup 掛載失敗導致了 container setup 失敗。
此時查看發現目標實例創建成功了、只是 start 失敗。
這是便可以排除 image 的可用性和有效性問題了,應該是 host-OS 中的 cgroup 驅動與 guest-OS中cgroup 驅動的沖突或者不兼容。
已知本次使用的 image版本是? Debian-12,kernel 是 6 系列的 LTS,默認應該直接啟用了 cgroup-V2。
可以考慮直接查看 host-OS中的 cgroup驅動狀況:
通過上文輸出可知,host-OS中安裝的也是 cgroup-V2 。
此時應該考慮是不是 host-OS中的 cgroup 配置了 混合 模式:
從以上輸出中看,可知 host-OS中的 cgroup 是支持 混合模式配置的,且注銷了直接啟用 cgroup-V2 。
此時嘗試通過手工卸載 cgroup 的 systemd 掛載點后、重新拉起一個 實例:
驗證發現的確是 cgroup 不兼容導致的 實例 拉起失敗。
解決辦法:
host-OS啟動時先卸載 cgroup 默認掛載的 systemd ,由 LXC 創建實例時自動選擇所需掛載的cgroup驅動版本: