基于PVE-9.1版本lxc直接部署OCI容器sing-box
在 PVE 宿主机上编辑 /etc/pve/lxc/容器ID.conf,添加 lxc.cgroup2.devices.allow: c 10:200 rwm lxc.mount.entry: /dev/net/tun dev/net/tun none bind,create=file 如果不开启,就会创建tun设备失败。 进入lxc执行ip转发设置 永久开启: echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf 实际情况,由于这个容器并没有启动标准的 Linux 初始化系统(没有运行 OpenRC 或 Systemd)。它开机后,内核直接把 PID 1 交给了 Entrypoint 里的命令。也就是说,它根本不会去读取 /etc/local.d 或者 /etc/init.d 里的任何自启动脚本。所以上面设置的开启转发并没有在启动的时候加载 为了加载转发设置,需要执行sysctl -p 在 PVE 网页端,双击Entrypoint那一行进行编辑 将原本的内容:sing-box 修改为(利用 shell 将两个命令串联):/bin/sh -c "sysctl -p; exec sing-box run -c /etc/sing-box/config.json" 补全缺失的config.json及my-direct.json和my-proxy.json lxcId对应的是lxc的Id,根据实际情况进行对应修改 挂载rootfs到PVE本地 pct mount lxcId 上传config.json mkdir -p /var/lib/lxc/lxcId/rootfs/etc/sing-box cp -a /config/path/config.json /var/lib/lxc/lxcId/rootfs/etc/sing-box/config.json cp -a /config/path/my-direct.json /var/lib/lxc/lxcId/rootfs/etc/sing-box/my-direct.json cp -a /config/path/my-proxy.json /var/lib/lxc/lxcId/rootfs/etc/sing-box/my-proxy.json 设置权限 权限处理参加 假设容器内是root,那在本地就是100000:100000 chown -R 100000:100000 /var/lib/lxc/lxcId/rootfs/etc/sing-box/ 卸载rootfs pct unmount lxcId 启动错误检查 前台运行调试 (推荐) 先确保容器是停止状态,然后在 PVE 宿主机上以前台模式启动这个容器,这样所有的报错都会直接打印在你的屏幕上: ...