侧边栏壁纸

PVE LXC 容器部署 1Panel + Docker 完整教程

2026年08月18日 8阅读 0评论 0点赞

PVE LXC 容器部署 1Panel + Docker 完整教程

适用环境:Proxmox VE 8.x + Ubuntu 22.04 LXC 容器 + 1Panel v2 + Docker 29.x

一、PVE 宿主机创建 LXC 容器

  1. PVE Web 界面 → 创建 CT
  2. 模板选 Ubuntu 22.04
  3. 资源建议:2 核 / 2GB 内存 / 30GB 磁盘 / 512MB swap
  4. 网络:固定 IP(如 192.168.8.250/24
  5. 创建完成后先不要启动

二、修改 LXC 配置文件(关键)

PVE 宿主机的 Shell 操作:

# 编辑 CT 配置文件(假设 CT ID 为 107)
nano /etc/pve/lxc/107.conf

完整配置如下(覆盖原有内容):

arch: amd64
cores: 2
features: nesting=1,keyctl=1,fuse=1
hostname: 1panel
memory: 2048
net0: name=eth0,bridge=vmbr0,firewall=1,gw=192.168.8.254,ip=192.168.8.250/24,type=veth
ostype: ubuntu
rootfs: local-lvm:vm-107-disk-0,size=30G
swap: 512
lxc.apparmor.profile: unconfined
lxc.cgroup2.devices.allow: a
lxc.cap.drop:
lxc.mount.entry: /dev/net/tun dev/net/tun none bind,create=file
lxc.mount.entry: /dev/null sys/module/apparmor/parameters/enabled none bind 0 0

各配置项说明

配置项作用
features: nesting=1,keyctl=1,fuse=1Docker in LXC 的基础条件
lxc.apparmor.profile: unconfined解除 AppArmor 限制,允许 Docker 加载 profile
lxc.cgroup2.devices.allow: a允许访问所有设备(含 TUN)
lxc.cap.drop:(留空)不丢弃任何 Linux Capability
lxc.mount.entry: /dev/net/tun ...将宿主机 TUN 设备挂载进容器,frp/OpenVPN/WireGuard 必需
lxc.mount.entry: /dev/null sys/module/apparmor/...欺骗 Docker 以为系统未启用 AppArmor,绕过 containerd 新版本限制

启动容器

pct start 107
pct enter 107

三、容器内安装 Docker

# 安装依赖
apt update
apt install -y ca-certificates curl gnupg

# 添加 Docker 官方 GPG 密钥
install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg
chmod a+r /etc/apt/keyrings/docker.gpg

# 添加 Docker 仓库
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null

# 安装 Docker
apt update
apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin

# 验证
docker --version
systemctl status docker

四、修改 Docker 默认网段(避开 172.17/172.18)

编辑 /etc/docker/daemon.json

nano /etc/docker/daemon.json

写入:

{
  "registry-mirrors": [
    "https://docker.1ms.run"
  ],
  "bip": "10.200.0.1/24",
  "default-address-pools": [
    {
      "base": "10.200.0.0/16",
      "size": 24
    }
  ]
}
  • bip:Docker 默认桥 docker0 的网段
  • default-address-pools:后续新建网络的地址池
  • registry-mirrors:国内镜像加速

重启生效:

systemctl daemon-reload
systemctl restart docker

# 验证
ip addr show docker0 | grep inet
# 期望:inet 10.200.0.1/24

五、安装 1Panel

bash -c "$(curl -sSL https://resource.fit2cloud.com/1panel/package/v2/quick_start.sh)"

交互选项:

选项推荐值
安装目录默认 /opt
面板端口默认 18080
安全入口随机生成,记下来
是否安装 Dockern(已手动安装)
是否配置镜像加速y,填 https://docker.1ms.run

安装完成后访问:http://你的IP:18080/安全入口


六、修改 1panel-network 网段

新装的 1Panel 会自动创建 1panel-network,但网段默认是 172.18.x.x,需要重建。

1. 在 1Panel 面板停止所有应用

应用商店 → 已安装,把所有应用全部停止

2. 宿主机侧操作(在容器内执行)

# 查看哪些容器在用 1panel-network
docker network inspect 1panel-network --format '{{range .Containers}}{{.Name}} {{end}}'

# 逐个断开(替换为实际容器名)
docker network disconnect 1panel-network 容器名1
docker network disconnect 1panel-network 容器名2

# 删除旧网络
docker network rm 1panel-network

# 用新网段重建
docker network create \
  --driver bridge \
  --subnet 10.200.1.0/24 \
  --gateway 10.200.1.1 \
  1panel-network

3. 验证

docker network inspect 1panel-network --format '{{range .IPAM.Config}}{{.Subnet}}{{end}}'
# 期望:10.200.1.0/24

4. 回到 1Panel 启动应用

应用商店 → 已安装,逐个启动应用。1Panel 会自动将容器连接到新的 1panel-network

⚠️ 如果某个应用启动报 network not found,在 1Panel 里卸载后重新安装该应用即可。

七、验证整体环境

# 1. Docker 基础测试
docker run --rm hello-world
# 期望:Hello from Docker!

# 2. 默认桥网段
ip addr show docker0 | grep inet
# 期望:10.200.0.1/24

# 3. 1Panel 网络网段
docker network inspect 1panel-network --format '{{range .IPAM.Config}}{{.Subnet}}{{end}}'
# 期望:10.200.1.0/24

# 4. TUN 设备(frp/OpenVPN 等需要)
ls -l /dev/net/tun
# 期望:crw-rw-rw- 1 root root 10, 200 ... /dev/net/tun

# 5. 镜像加速
docker info | grep -A 3 "Registry Mirrors"
# 期望:https://docker.1ms.run/

全部符合预期,环境搭建完成 ✅


八、最终网络布局

网络网段用途
docker010.200.0.0/24Docker 默认桥
1panel-network10.200.1.0/241Panel 应用互联
后续新建网络10.200.2.0/24Compose / 自定义

172.17.0.0/16172.18.0.0/16 不再出现。


九、常见问题排查

容器卡在 Created 状态无法启动

原因:containerd 版本过高,与 LXC AppArmor 冲突。

解决:降级 containerd

containerd --version
apt-cache madison containerd.io
apt install -y --allow-downgrades containerd.io=1.7.28-1~ubuntu.22.04~jammy
apt-mark hold containerd.io
systemctl restart docker

frpc 报错 no such file or directory (TUN)

原因/dev/net/tun 未挂载进容器。

解决:确认 107.conf 中有 lxc.mount.entry: /dev/net/tun dev/net/tun none bind,create=file,重启 CT。

AppArmor 报错 Permission denied

原因:LXC 容器自身受 AppArmor 限制。

解决:确认 107.conf 中有 lxc.apparmor.profile: unconfined/dev/null 绑定挂载行,重启 CT。

1Panel 应用商店同步超时

原因apps-assets.fit2cloud.com 在 IPv6/代理环境下经常超时。

解决

# 强制 IPv4
1pctl listen-ip ipv4

# 或在 1Panel 面板设置 → DNS 改为 8.8.8.8 / 114.114.114.114

十、安装应用示例

安装 frpc

  1. 1Panel → 应用商店 → 搜索 frp → 安装 Frpc 客户端
  2. 填写服务端地址、端口、Token
  3. 启动后验证:docker ps | grep frpc 看到 Up 即成功

安装雷池 WAF

bash -c "$(curl -fsSLk https://waf-ce.chaitin.cn/release/latest/manager.sh)"
⚠️ 雷池需要 80/443 端口,若 1Panel 已安装 OpenResty,需先将 OpenResty 的 HTTP 改为 8080、HTTPS 改为 8443,把 80/443 让给雷池。

安装完成后访问 https://你的IP:9443,初始密码忘了可重置:

docker exec safeline-mgt resetadmin

附录:完整 107.conf 模板

arch: amd64
cores: 2
features: nesting=1,keyctl=1,fuse=1
hostname: 1panel
memory: 2048
net0: name=eth0,bridge=vmbr0,firewall=1,gw=192.168.8.254,ip=192.168.8.250/24,type=veth
ostype: ubuntu
rootfs: local-lvm:vm-107-disk-0,size=30G
swap: 512
lxc.apparmor.profile: unconfined
lxc.cgroup2.devices.allow: a
lxc.cap.drop:
lxc.mount.entry: /dev/net/tun dev/net/tun none bind,create=file
lxc.mount.entry: /dev/null sys/module/apparmor/parameters/enabled none bind 0 0
新建 CT 时直接套用此模板,可一步到位避免所有权限问题。
0
打赏

—— 评论区 ——

昵称
邮箱
网址
取消
博主栏壁纸
5 文章数
18 标签数
29 评论量
人生倒计时
舔狗日记