记录在LXC容器内配置docker和1panel面板
前情提要
最近突然很怀念过去,整理 nas 发现家人以前备份的各种相机和手机图片分散在 nas 各处,要寻找非常不方便,虽说文件的批量搜索已经用 alist 实现了(按文件名 1s 内可以搜索全盘文件),但是对图片就毫无能力,这肯定不符合现在智能搜索的趋势。于是我打算用 immich 来搭建家庭的图片站;
我希望使用lxc 容器隔离宿主并获得更好的性能,同时我也想用1panel更方便的管理immich,还需要再 lxc 内挂载 smb,同步数据到 nas 内。遇到了许多问题,于是就有了这篇文章。
心路历程
首先我先一如往常创建了一个 lxc 容器,尝试创建一个 smb 共享目录到 lxc 内,发现 smb 挂载报错,原来是没有开特权容器,没办法,只好重新创建了一个带特权的 lxc 容器,这时候启动 lxc 发现终端一直无法连接,研究半天后终于解决
接着,再将挂载信息写入 fstab,开机自动挂载就弄好了。
接着就是安装 1panel 了,安装确实是非常的简单,使用官方给的一键安装脚本一下子就安装好了。简单配置完成代理和 docker 之后,再添加了一个第三方配置源,在 1panel 的计划任务中添加如下脚本(记得安装 unzip)
wget -P /opt/1panel/resource/apps/local https://ghfast.top/https://github.com/okxlin/appstore/archive/refs/heads/localApps.zip
unzip -o -d /opt/1panel/resource/apps/local/ /opt/1panel/resource/apps/local/localApps.zip
cp -rf /opt/1panel/resource/apps/local/appstore-localApps/apps/* /opt/1panel/resource/apps/local/
rm -rf /opt/1panel/resource/apps/local/appstore-localApps
rm -rf /opt/1panel/resource/apps/local/localApps.zip再在商店右上角刷新商店,就可以找到 immich 等官方源没有的应用了。
但是当我按下安装后,发现应用拉取完成镜像后应用服务启动,并且黄色警告报错提醒查看日志,但是日志内空无一物。在经历许久的探索之后终于找到方法。
在宿主机的目录下 /etc/pve/lxc/XXX.config (XXX 是你 LXC 容器的序号,例如 100,101 这些)配置文件添加
lxc.cgroup2.devices.allow: a
lxc.cap.drop:重启 lxc 即可运行安装好的应用(docker 应用)啦。
总之,在特权 lxc 下使用 docker 容器,最好还是加上这个参数!
智能总结
懒得打啦,用 AI 偷个懒。
用户希望通过 Immich 搭建家庭图片站,使用 LXC 容器隔离宿主并提升性能,同时借助 1Panel 管理,并挂载 SMB 共享同步数据到 NAS。搭建过程中遇到以下问题及解决方案:
初始问题:创建普通 LXC 容器时,SMB 挂载失败,因未启用特权容器。改为特权 LXC 后,又遇到终端无法连接问题,经研究解决。
SMB 挂载:通过配置
fstab实现 SMB 共享的开机自动挂载。1Panel 安装:使用官方一键脚本安装 1Panel,配置代理和 Docker 后,通过脚本添加第三方应用源,成功在商店中加载 Immich。
应用启动失败:安装 Immich 后,服务启动报错且日志为空。最终通过在 LXC 配置文件
/etc/pve/lxc/XXX.config中添加lxc.cgroup2.devices.allow: a和lxc.cap.drop:,重启 LXC 解决,Docker 应用正常运行。结论:在特权 LXC 下运行 Docker 应用时,需添加上述配置参数以确保正常运行。