360 Secure SkillHub
360 安全技能中心

Proxmox Create Vm

核心功能:可在Proxmox VE上创建Ubuntu24.04的LXC容器(默认,轻量快启)或全虚拟机;自动分配实例ID、配置Docker及Compose v2,支持自定义名称、CPU、内存等参数。典型场景:搭建轻量服务、Docker应用底座,需全系统隔离或自定义内核时选VM。输入指定名称等参数,输出实例ID、IP、SSH访问方式等信息。

solomonneas
solomonneas
热度 51.71
最近更新 2026-05-18 12:31:14
分类:自动化依赖:代码执行应用场景:自动化脚本 / DevOps

安装技能

复制下面的话术发给你的 Agent,它会通过 secure-skills 检索并安装该技能。

执行命令安装此 skill: npx secure-skills-cli add proxmox-create-vm
Metadata
name
proxmox-create-vm
version
1.0.0
description
Create Ubuntu 24.04 LXC containers or full VMs on Proxmox VE. Docker-ready with Compose v2. Handles nesting for Docker-in-LXC, auto-picks next available CTID, and includes post-boot Docker setup.
tags
["proxmox","lxc","vm","ubuntu","infrastructure","automation","docker","homelab"]
category
infrastructure

Proxmox VM/Container Creator

Create Ubuntu 24.04 LXC containers or full VMs on Proxmox VE. Returns a Docker-ready host with SSH access.

When to Use

  • "create proxmox vm"
  • "create proxmox container"
  • "spin up lxc"
  • "new container on proxmox-host"
  • Any time you need a fresh Linux host on Proxmox

This is a base skill. It creates the infrastructure. Other skills deploy applications onto it.

LXC vs VM Decision Guide

Use LXC when Use VM when
Running Docker containers (TheHive, MISP, etc.) Security Onion, Zeek with AF_PACKET
Lightweight services Need custom kernel modules
Want fast startup (~5 seconds) Need full OS isolation
Most SOC tools Network monitoring with raw sockets

Default: LXC. Only use VM when the application explicitly needs kernel access.

User Inputs

Parameter Default Required
Name - Yes
Proxmox host proxmox-host (YOUR_PROXMOX_IP) No
Type lxc No (lxc or vm)
CPU cores 2 No
RAM (MB) 4096 No
Disk (GB) 8 No
Extra packages - No

Prerequisites Check

# SSH to Proxmox
ssh proxmox-host "pveversion" || echo "FAIL: Cannot SSH to Proxmox host"

# Check template (LXC)
ssh proxmox-host "pveam list local | grep ubuntu-24.04" || echo "Template not cached, will download"

# Find next CTID
ssh proxmox-host "pct list" | tail -n +2 | awk '{print $1}' | sort -n | tail -1
# Use max + 1

Execution Flow: LXC Container

Step 1: Ensure template is cached

ssh proxmox-host "pveam list local | grep ubuntu-24.04 || pveam download local ubuntu-24.04-standard_24.04-2_amd64.tar.zst"

Step 2: Find next available CTID

NEXT_CTID=$(ssh proxmox-host "cat <(pct list | tail -n +2 | awk '{print \$1}') <(qm list | tail -n +2 | awk '{print \$1}') 2>/dev/null | sort -n | tail -1")
NEXT_CTID=$((NEXT_CTID + 1))

Step 3: Create container

ssh proxmox-host "pct create $CTID local:vztmpl/ubuntu-24.04-standard_24.04-2_amd64.tar.zst \
  --hostname <name> \
  --memory <ram> \
  --cores <cores> \
  --rootfs local-lvm:<disk> \
  --net0 name=eth0,bridge=vmbr0,ip=dhcp \
  --unprivileged 1 \
  --features nesting=1 \
  --start 1"

Key flags:

  • --unprivileged 1: Security best practice
  • --features nesting=1: Required for Docker inside LXC
  • --start 1: Start immediately after creation

Step 4: Wait for boot and get IP

sleep 10  # LXC boots in ~5 seconds

# Get IP from Proxmox
ssh proxmox-host "pct exec $CTID -- hostname -I"

# Or from DHCP
ssh proxmox-host "pct exec $CTID -- ip -4 addr show eth0 | grep inet | awk '{print \$2}' | cut -d/ -f1"

Step 5: Post-boot Docker setup

bash scripts/post-boot-setup.sh proxmox-host $CTID

Or manually:

ssh proxmox-host "pct exec $CTID -- bash -c '
  apt-get update -qq
  apt-get install -y -qq docker.io curl git htop
  systemctl enable docker && systemctl start docker
  mkdir -p /usr/local/lib/docker/cli-plugins
  curl -SL https://github.com/docker/compose/releases/latest/download/docker-compose-linux-x86_64 -o /usr/local/lib/docker/cli-plugins/docker-compose
  chmod +x /usr/local/lib/docker/cli-plugins/docker-compose
'"

Step 6: Verify

ssh proxmox-host "pct exec $CTID -- docker --version && pct exec $CTID -- docker compose version"

Execution Flow: Full VM

Use scripts/create-vm.sh for full VMs when LXC won't work:

ssh proxmox-host "qm create $VMID --name <name> --memory <ram> --cores <cores> \
  --net0 virtio,bridge=vmbr0 --scsihw virtio-scsi-pci \
  --scsi0 local-lvm:<disk>,format=raw --ide2 local-lvm:cloudinit \
  --boot c --bootdisk scsi0 --serial0 socket --vga serial0 \
  --ciuser deploy --cipassword <password> --ipconfig0 ip=dhcp \
  --start 1"

Return Values

Report to caller:

Container/VM Created: <name>
CTID/VMID: <id>
Type: lxc | vm
IP: <ip>
SSH: root@<ip> (LXC) or deploy@<ip> (VM)
Docker: installed
Docker Compose v2: installed

Teardown

# LXC
ssh proxmox-host "pct stop $CTID && pct destroy $CTID --purge"

# VM
ssh proxmox-host "qm stop $VMID && qm destroy $VMID --purge"

Critical Gotchas

See references/gotchas.md for full details:

  1. Docker in LXC needs nesting=1: Without --features nesting=1, Docker fails to create networks
  2. LXC limitations: No custom kernel modules, no raw sockets (AF_PACKET). Use VM for Security Onion, Zeek
  3. Template caching: pveam download is slow first time. Check pveam list local first
  4. CTID conflicts: Always check pct list before picking a CTID
  5. Disk is thin-provisioned: 770GB free in pool but containers can fill up fast
  6. Wazuh (CTID 105): 99.3% full at 25GB. Don't colocate storage-heavy services