并不是所有业务都需要一台完整的虚拟机。Proxmox VE 中的 LXC 容器与宿主机共享内核,一两秒即可启动,占用的内存和磁盘也远少于 KVM 虚拟机,非常适合在独立服务器或宿主机(母鸡)上运行网站、数据库、监控、代理和内部工具。本文介绍如何下载容器模板、通过 Web 界面和 pct 命令创建容器、为容器分配公网或内网 IP、限制 CPU、内存、磁盘和带宽、在容器中运行 Docker,以及备份。
| LXC 容器 | KVM 虚拟机 | |
|---|---|---|
| 操作系统 | 仅支持 Linux | Linux、Windows、BSD |
| 资源开销 | 极低,数秒内启动 | 较高,需要完整启动操作系统 |
| 隔离性 | 共享内核 | 完全隔离 |
| 内核调优与模块 | 受限 | 完全可控 |
| 典型用途 | 自用服务、大量小型网站 | 客户 VPS、Windows、Docker 宿主机 |
模板是预先制作好的根文件系统,提供 Debian、Ubuntu、Rocky Linux、AlmaLinux、Alpine 等系统。在 Web 界面中打开 local → CT Templates → Templates,或者在宿主机上使用命令行。模板文件名包含版本号,请从列表中复制准确的名称。
pveam update
pveam available --section system | grep -E 'debian-12|ubuntu-24.04|rockylinux-9|alpine'
pveam download local debian-12-standard_12.7-1_amd64.tar.zst # use the exact name from the list
pveam list local
在 Web 界面中点击 Create CT,按向导依次填写:主机名和 root 密码(或 SSH 公钥)、模板、磁盘大小、CPU 核心数、内存和网络。保持勾选 Unprivileged container(非特权容器);它会把容器内的 root 映射为宿主机上的非特权用户,安全性高得多。用命令行创建同样的容器:
pct create 101 local:vztmpl/debian-12-standard_12.7-1_amd64.tar.zst \
--hostname web01 \
--unprivileged 1 \
--cores 2 --memory 2048 --swap 512 \
--rootfs local-lvm:20 \
--net0 name=eth0,bridge=vmbr0,ip=203.0.113.11/24,gw=203.0.113.1 \
--nameserver 1.1.1.1 \
--ssh-public-keys /root/.ssh/authorized_keys \
--features nesting=1 \
--onboot 1
pct start 101
pct enter 101 # open a root shell inside the container
pct list
公网 IP:将容器接入承载公网的网桥(通常是 vmbr0),并为其分配一个附加 IP 以及该子网的网关,方法与虚拟机完全相同(参见为 Proxmox 虚拟机分配公网 IP)。如果附加 IP 是路由到指定 MAC 地址的,请在 net0 选项中用 hwaddr= 设置该 MAC。
内网 NAT:如需让多个容器共用宿主机的单个 IP,可以将它们接入 vmbr1 这样的内网网桥,再转发所需端口,具体方法参见 Proxmox VE NAT 网络配置:
pct set 102 --net0 name=eth0,bridge=vmbr1,ip=10.10.10.12/24,gw=10.10.10.1
pct reboot 102
所有限制都可以在容器运行时修改,大部分会立即生效。
# CPU: 2 visible cores, but at most 1.5 cores of total CPU time
pct set 101 --cores 2 --cpulimit 1.5
# Memory and swap (MB)
pct set 101 --memory 1024 --swap 256
# Grow the root disk by 10 GB (disks can grow online but not shrink)
pct resize 101 rootfs +10G
# Bandwidth: rate is in MB/s, so 12.5 is roughly 100 Mbps
pct set 101 --net0 name=eth0,bridge=vmbr0,ip=203.0.113.11/24,gw=203.0.113.1,rate=12.5
pct config 101
启用嵌套(nesting)后,Docker 可以在非特权容器中运行。部分镜像还需要 keyctl 特性。
pct set 101 --features nesting=1,keyctl=1
pct reboot 101
pct enter 101
# inside the container, install Docker as usual (see our Docker guide)
对于生产环境的 Docker 宿主机,尤其是运行大量容器或使用特殊存储驱动的场景,KVM 虚拟机仍然是更稳妥的选择。
# Snapshot before risky changes (requires LVM-thin, ZFS or Ceph storage)
pct snapshot 101 before-upgrade
pct rollback 101 before-upgrade
# Full backup with compression (see our Proxmox backup guide for schedules)
vzdump 101 --mode snapshot --storage local --compress zstd
# Clone a container you have prepared as a base
pct clone 101 105 --hostname web05 --full 1
关于定时备份和恢复,请参见 Proxmox VE 备份与快照教程。
检查 pct config 中的 IP、前缀长度和网关,确认网桥正确,并检查容器内 /etc/resolv.conf 中的 DNS 设置。在容器内先测试 ping -c3 1.1.1.1,再测试 ping -c3 google.com,以区分是路由问题还是 DNS 问题。同时确认 Proxmox 防火墙没有拦截该容器。
不能直接转换。需要新建一台虚拟机,再迁移数据或应用,例如使用 rsync(参见服务器迁移教程)。
这取决于业务负载,而不是 Proxmox 本身。由于容器开销很小,一台 64 GB 内存的服务器可以轻松承载几十个小型网站或服务。请留意宿主机的内存、磁盘 I/O 和 CPU steal,并为高峰预留余量。
如果按以上步骤操作后问题仍未解决,请提交工单联系 IMIDC 7×24 技术支持,并附上服务器 IP、Proxmox VE 版本、容器 ID 及其配置(pct config ID)和完整报错信息,方便工程师快速定位。