pve-pct
PVE 容器 PCT 管理命令大全
补充说明
Proxmox VE 使用 pct 作为 LXC 容器专属管理命令。LXC 容器占用资源极低、启动迅速,常用于运行路由、DNS、网页服务与各类轻量应用,适配 PVE 7.x / 8.x。
一、基础信息查看
# 查看全部容器列表
pct list
# 查看单个容器运行状态
pct status 200
# 查看容器完整配置
pct config 200
# 查看容器资源使用概况
pvesh get /cluster/resources --type lxc
二、生命周期启停管理
# 启动容器
pct start 200
# 停止容器
pct stop 200
# 重启容器
pct reboot 200
# 进入容器控制台(类似 SSH)
pct enter 200
# 在容器内执行命令
pct exec 200 -- ip addr
# 在容器内查看内存占用
pct exec 200 -- free -h
# 在容器内安装软件
pct exec 200 -- apt update && apt install -y nginx
强制应急操作
# 强制停止容器
pct stop 200 --force
# 彻底删除容器并清理配置
pct destroy 200 --purge
# 挂起容器(冻结进程)
pct freeze 200
# 恢复挂起容器
pct unfreeze 200
三、资源与挂载配置
pct set 修改参数即时生效,无需重启服务。
# 设置运行内存(MB)
pct set 200 -memory 512
# 设置 Swap 大小(MB,0 为禁用)
pct set 200 -swap 256
# 设置 CPU 核心数
pct set 200 -cores 1
# 设置 CPU 配额限制
pct set 200 -cpulimit 50
# 修改根目录磁盘大小(扩展)
pct resize 200 rootfs +2G
# 修改根目录磁盘大小(缩小)
pct resize 200 rootfs -1G
# 添加宿主机目录挂载
pct set 200 -mp0 /宿主机路径,mp=/容器内路径
# 挂载时为目录设置权限
pct set 200 -mp0 /share,mp=/mnt/share,acl=1
# 移除挂载点
pct set 200 -delete mp0
# 开启开机自启
pct set 200 -onboot 1
# 设置容器主机名
pct set 200 -hostname my-container
# 设置 DNS
pct set 200 -nameserver 8.8.8.8
# 设置网络(静态 IP)
pct set 200 -net0 name=eth0,bridge=vmbr0,ip=192.168.1.200/24,gw=192.168.1.1
# 设置网络(DHCP)
pct set 200 -net0 name=eth0,bridge=vmbr0,ip=dhcp
四、模板创建与容器克隆
# 查看可用模板列表
pveam list local
# 更新模板源
pveam update
# 下载模板
pveam download local ubuntu-22.04-standard_22.04-1_amd64.tar.gz
# 通过模板新建容器
pct create 200 /var/lib/vz/template/cache/ubuntu-22.04-standard_22.04-1_amd64.tar.gz \
--hostname my-ct --storage local-lvm --memory 512 --cores 1 \
--net0 name=eth0,bridge=vmbr0,ip=dhcp
# 克隆现有容器
pct clone 200 201 --hostname lxc-new
# 将容器转换为模板
pct template 200
五、快照与备份操作
# 创建容器快照
pct snapshot 200 snap01
# 创建快照并包含挂起状态
pct snapshot 200 snap01 --force 1
# 快照回滚
pct rollback 200 snap01
# 删除快照
pct delsnapshot 200 snap01
# 查看所有快照
pct listsnapshot 200
# 整机备份容器
vzdump 200 --storage local --compress zstd
# 查看备份任务
pvesh get /cluster/backup
六、高级权限配置
编辑容器配置文件 /etc/pve/lxc/200.conf:
# 解除 AppArmor 限制(内网环境推荐)
lxc.apparmor.profile: unconfined
# 允许所有设备访问(用于挂载磁盘)
lxc.cgroup.devices.allow: a
# 移除所有能力降权(不推荐生产环境)
lxc.cap.drop:
# 开启嵌套虚拟化(容器内运行 Docker 必备)
features: nesting=1
# 挂载 FUSE 文件系统
lxc.mount.auto: sys:mixed
# 允许挂载 NFS
lxc.mount.entry: /mnt/nfs mnt/nfs none bind,create=dir
# 开启 TUN/TAP(VPN 类容器需要)
lxc.cgroup2.devices.allow: c 10:200 rwm
七、批量运维常用脚本
# 批量启动所有已停止的容器
for ct in $(pct list | awk '/stopped/ {print $1}'); do pct start $ct; done
# 批量停止所有运行中的容器
for ct in $(pct list | awk '/running/ {print $1}'); do pct stop $ct; done
# 批量重启所有运行中的容器
pct list | awk '/running/ {print $1}' | xargs -I {} pct reboot {}
# 批量设置开机自启
for ct in $(pct list | awk 'NR>1 {print $1}'); do pct set $ct -onboot 1; done
# 批量创建快照
for ct in $(pct list | awk 'NR>1 {print $1}'); do pct snapshot $ct "snap-$(date +%Y%m%d)"; done
# 批量查看 IP 地址
for ct in $(pct list | awk 'NR>1 {print $1}'); do echo "=== CT $ct ==="; pct exec $ct -- hostname -I; done
八、日志与故障排查
# 查看容器启动日志
journalctl -u pve-container@200
# 实时滚动容器日志
journalctl -f -u pve-container@200
# 查看 LXC 通用日志
journalctl -u pveproxy
# 查看容器网络调试日志
pct exec 200 -- ip addr
pct exec 200 -- ip route
pct exec 200 -- ping -c 3 8.8.8.8
# 查看宿主机 LXC 进程
ps aux | grep lxc
# 查看容器文件系统使用
pct exec 200 -- df -h
# 查看容器进程列表
pct exec 200 -- ps aux
九、常用别名优化
echo "alias ctlist='pct list'" >> ~/.bashrc
echo "alias ctstart='pct start'" >> ~/.bashrc
echo "alias ctstop='pct stop'" >> ~/.bashrc
echo "alias ctreboot='pct reboot'" >> ~/.bashrc
echo "alias ctstatus='pct status'" >> ~/.bashrc
echo "alias ctconfig='pct config'" >> ~/.bashrc
echo "alias ctenter='pct enter'" >> ~/.bashrc
echo "alias ctexec='pct exec'" >> ~/.bashrc
source ~/.bashrc
注意事项
- LXC 共用宿主机内核,无法更换自定义内核
- 硬件直通、TUN、USB 设备需要手动添加 LXC 权限规则
- 开启
unconfined权限会降低安全性,仅内网环境推荐使用 - 嵌套虚拟化
nesting=1为容器内运行 Docker 必备 pct set修改参数即时生效,无需重启服务- 生产环境删除、迁移、回滚前务必做好备份
- 通过
pct enter进入容器无需 SSH 和密码
适用版本:Proxmox VE 7.x / 8.x