Proxmox VE tiene una ventaja que muchos ignoran: los contenedores LXC no son un añadido de terceros, son ciudadanos de primera clase. Se crean, respaldan, migran y restauran desde la misma interfaz que las máquinas virtuales, con la misma API y el mismo sistema de backups.
En esta guía vemos el ciclo de vida completo desde la línea de comandos: descargar plantillas, crear el contenedor, limitarlo, entrar por consola y respaldarlo de forma que la restauración funcione de verdad.
Por qué LXC y no una VM
Un contenedor Debian en reposo consume del orden de 60–90 MB de RAM. La misma instalación como VM no baja de 400 MB, y además reserva disco para el sistema completo. Si el servicio no necesita un kernel propio ni hardware emulado, el contenedor gana en densidad, arranque y respaldo.
La contrapartida es clara: comparten kernel con el host. Un fallo de aislamiento afecta a todos, y no puedes correr un kernel distinto ni cargar módulos. Para servicios estándar (web, DNS, monitorización, bases de datos ligeras) es un intercambio excelente.
Paso 1: plantillas
Proxmox no trae sistemas operativos; trae la herramienta para descargarlos.
# Actualizar el catálogo de plantillas
pveam update
# Ver las disponibles (filtrando por Debian)
pveam available --section system | grep debian
# Descargar la que nos interesa al storage 'local'
pveam download local debian-12-standard_12.7-1_amd64.tar.zst
# Comprobar qué tenemos
pveam list local
El nombre exacto cambia con las versiones. Si el comando falla, es que el catálogo se movió: pveam update y vuelve a listar.
Paso 2: crear el contenedor
pct create 101 local:vztmpl/debian-12-standard_12.7-1_amd64.tar.zst \
--hostname web01 \
--cores 2 \
--memory 2048 \
--swap 512 \
--rootfs local-lvm:8 \
--net0 name=eth0,bridge=vmbr0,ip=10.0.0.51/24,gw=10.0.0.1 \
--nameserver 1.1.1.1 \
--unprivileged 1 \
--features nesting=1 \
--onboot 1 \
--password
Dos decisiones importantes en esa línea:
--unprivileged 1mapea el root del contenedor a un usuario sin privilegios del host (normalmente 100000). Es la opción por defecto desde PVE 7 y evita que un escape de contenedor te dé root real.--features nesting=1solo si dentro vas a correr Docker o systemd anidado. Si no lo necesitas, déjalo fuera: reduce superficie de ataque.
Arrancar y comprobar:
pct start 101
pct status 101
pct list
Paso 3: entrar y administrar
Tienes tres formas de acceso, y conviene conocer las tres porque sirven para cosas distintas.
# Shell interactiva completa (como SSH local)
pct enter 101
# Ejecutar un comando puntual sin entrar
pct exec 101 -- systemctl status nginx
# Consola serie (útil si el contenedor no arranca bien)
pct console 101
pct exec es el que más vas a usar en automatización: permite hacer comprobaciones desde el host sin abrir sesión.
Paso 4: ajustar recursos en caliente
Aquí está una de las ventajas reales frente a la VM: cambiar RAM o CPU no requiere reiniciar.
# Subir RAM y CPU sin reiniciar
pct set 101 --memory 4096 --cores 4
# Ampliar disco (el contenedor debe estar parado para rootfs)
pct resize 101 rootfs +10G
# Añadir un disco de datos extra
pct set 101 --mp0 /mnt/datos,mp=/datos
Ojo con pct resize: crece el volumen, pero no el sistema de archivos dentro. Hay que entrar y hacer resize2fs o xfs_growfs según el caso.
Paso 5: backups que se puedan restaurar
Un backup sin prueba de restauración es una ilusión. El flujo correcto:
# Backup en modo snapshot (no detiene el contenedor)
vzdump 101 --storage local-backup --mode snapshot --compress zstd
# Ver qué hay
ls -lh /var/lib/vz/dump/ | grep 101
# Restaurar en un ID distinto para probar sin tocar el original
pct restore 199 local-backup:vzdump-lxc-101-2026_11_18-03_00_00.tar.zst \
--storage local-lvm --hostname web01-test
Restaurar en un ID libre (199) y no encima del original es la diferencia entre una prueba y un accidente. Arranca el clon, comprueba que el servicio responde, y solo entonces borra.
Recomendación de retención: keep-last=3, keep-daily=7, keep-weekly=4. Ocupa poco y cubre los tres escenarios clásicos: «me equivoqué hace una hora», «algo se rompió esta semana» y «necesito volver al mes pasado».
Errores que cuestan tiempo
- Contenedor privilegiado sin necesidad. Si lo marcas, el root del contenedor es root del host. Casi nunca hace falta; cuando lo parece, suele ser un permiso de dispositivo que se resuelve con un bind mount.
- Backup en modo stop sin avisar. Con
--mode stopel servicio se cae durante el respaldo. Para bases de datos es lo correcto, pero programa la ventana. - Ignorar el swap. Un contenedor con
--swap 0se muere por OOM antes de que te des cuenta. Deja margen. - Restaurar sobre el original sin backup previo. El restore sobrescribe. Siempre a un ID nuevo.
Lo que viene
Con esto tienes el ciclo completo: plantilla, creación, ajuste, consola y respaldo verificable. En la siguiente entrega veremos LXD e Incus, que son la evolución natural de LXC cuando necesitas gestionar contenedores en varios hosts a la vez y no quieres depender de la interfaz de Proxmox.