LXC ou VM no Proxmox? Compare consumo, isolamento e suporte a Docker, saiba quando usar cada um e veja como criar um container LXC.

Para que serve

O Proxmox VE oferece dois tipos de "máquina": VMs (KVM/QEMU), que emulam um computador completo com kernel próprio, e containers LXC (CT), que compartilham o kernel do host e isolam apenas processos, rede e sistema de arquivos. Os dois aparecem lado a lado na interface, mas têm usos diferentes. Este artigo ajuda você a decidir entre LXC ou VM no Proxmox e mostra como criar um LXC corretamente.

Diferenças que importam na prática

AspectoContainer LXCVM (KVM)
KernelUsa o kernel do hostKernel próprio
Sistemas suportadosSomente LinuxLinux, Windows, BSD, appliances (pfSense, OPNsense)
ConsumoMuito baixo; RAM não usada fica livre para o hostMaior; RAM reservada para a VM (ballooning ajuda)
InicializaçãoSegundosBoot completo
IsolamentoMenor: uma falha de kernel afeta o hostForte: hipervisor separa os kernels
Migração ao vivoNão (só migração com reinício)Sim, entre nós de um cluster
Módulos de kernel, NFS/CIFS como cliente, VPN de kernelLimitado; exige ajustes ou modo privilegiadoFunciona normalmente
Docker dentroPossível, mas não recomendado pelo ProxmoxRecomendado

LXC ou VM no Proxmox: quando usar cada um

Use LXC para

  • Serviços Linux leves e de confiança: DNS (Pi-hole, Unbound), proxy reverso, servidor web simples, Uptime Kuma, Zabbix proxy, servidor de arquivos interno.
  • Ambientes de teste e desenvolvimento que você cria e destrói com frequência.
  • Quando a densidade importa: dezenas de serviços pequenos no mesmo servidor.

Use VM para

  • Windows (RDP, ERP, SQL Server) e qualquer sistema que não seja Linux.
  • Firewalls e roteadores virtuais (pfSense, OPNsense).
  • Bancos de dados críticos e aplicações de clientes diferentes, em que o isolamento pesa mais que a economia de recursos.
  • Hosts Docker/Kubernetes. A documentação do Proxmox recomenda rodar containers de aplicação dentro de uma VM quando você quer isolamento máximo e migração ao vivo.
  • Qualquer coisa que dependa de módulos de kernel próprios ou versão específica de kernel.

Pré-requisitos para criar um LXC

  • Proxmox VE 8.x ou 9.x acessível pela interface web (porta 8006).
  • Um storage com suporte a "Container" (por exemplo local-lvm ou ZFS).

Passo a passo: criar um container LXC

  1. Baixe um template. Em local → CT Templates → Templates, escolha por exemplo debian-12-standard ou debian-13-standard. Pelo shell do host:
    pveam update
    pveam available --section system | grep debian
    pveam download local debian-12-standard_12.12-1_amd64.tar.zst
    O nome exato do arquivo muda com as versões; use o que o pveam available listar.
  2. Clique em "Create CT". Deixe marcada a opção Unprivileged container (padrão). Containers não privilegiados mapeiam o root do container para um usuário sem privilégios no host, o que é bem mais seguro.
  3. Defina senha de root ou chave SSH, disco (ex.: 8–20 GB), CPU, memória e rede (bridge vmbr0 ou a rede interna que você usa, com IP estático ou DHCP).
  4. Em Options → Features, ative nesting apenas se for rodar systemd mais novo ou Docker dentro do container (em templates recentes ele já vem ativo).
  5. Inicie e acesse com pct enter ID no host ou pelo console da interface.

Equivalente pela linha de comando:

pct create 120 local:vztmpl/debian-12-standard_12.12-1_amd64.tar.zst \
  --hostname kuma --cores 2 --memory 1024 --swap 512 \
  --rootfs local-lvm:8 --net0 name=eth0,bridge=vmbr0,ip=dhcp \
  --unprivileged 1 --features nesting=1 --onboot 1
pct start 120

E o Docker dentro de LXC?

Funciona em muitos casos com nesting=1 (e às vezes keyctl=1), e é bastante usado por quem quer economizar RAM. Mas há riscos reais:

  • Atualizações de segurança do runc/containerd já quebraram Docker em LXC não privilegiado (erro ip_unprivileged_port_start ... permission denied, corrigido no Proxmox VE 9.1). Esse tipo de quebra pode se repetir.
  • Drivers de armazenamento (overlayfs sobre ZFS, por exemplo) e backups com snapshot podem se comportar de forma diferente.
  • Tornar o container privilegiado para "fazer funcionar" elimina o principal benefício de segurança.

Para produção, crie uma VM Debian/Ubuntu e instale o Docker nela (veja também o artigo «Como instalar Docker no Ubuntu e no Debian (com Docker Compose, pelo repositório oficial)»). Para laboratório, LXC é aceitável.

O Proxmox VE 9.1 também passou a aceitar imagens OCI (as mesmas do Docker Hub) como base para containers LXC, inclusive containers de aplicação. O recurso ainda é technology preview: teste antes de depender dele.

Como saber se funcionou

pct list
pct config 120
pct exec 120 -- ip -br a

O container deve aparecer como running, com IP na rede escolhida. Dentro dele, ping 1.1.1.1 e apt update confirmam rede e DNS.

Problemas comuns

  • Sem rede no container: confira bridge, gateway e se o IP escolhido não está em uso. Lembre que IPs públicos adicionais do seu bloco precisam estar configurados conforme a rede entregue no servidor.
  • "Permission denied" ao montar NFS/CIFS: monte o compartilhamento no host e repasse ao container com bind mount (pct set 120 -mp0 /mnt/dados,mp=/dados).
  • Permissões estranhas em bind mounts: em container não privilegiado, o UID 0 do container vira 100000 no host. Ajuste dono dos arquivos no host ou configure mapeamento de IDs.
  • Backup lento ou falhando em modo snapshot: verifique se o storage do container suporta snapshot; caso contrário o vzdump usa modo suspend.

Perguntas frequentes

LXC é mais rápido que VM no Proxmox?

O LXC tem menos sobrecarga porque usa o kernel do host e não emula hardware, então inicia em segundos e consome menos RAM. Em CPU e disco a diferença para uma VM com VirtIO costuma ser pequena.

Posso rodar Windows em um container LXC?

Não. O LXC compartilha o kernel Linux do host, então só roda distribuições Linux. Windows, BSD e appliances como pfSense e OPNsense precisam de VM.

É melhor rodar Docker em LXC ou em VM?

Em produção, em VM. Docker em LXC funciona com nesting=1, mas atualizações do runc/containerd já quebraram essa combinação e o isolamento é menor.

Container privilegiado ou não privilegiado?

Prefira sempre o não privilegiado (padrão). Ele mapeia o root do container para um usuário sem privilégios no host, o que limita o estrago em caso de invasão.

Para entender os conceitos de virtualização, veja também o artigo «O que é virtualização e hypervisor: Proxmox VE, VMware ESXi e Hyper-V comparados». Se a dúvida é sobre orquestração, veja «Kubernetes ou Docker Compose: quando vale a pena migrar no seu servidor dedicado».

Leitura complementar

Precisa de ajuda? Abra um ticket ou fale com o suporte pelo WhatsApp.

Esta resposta lhe foi útil? 0 Usuários acharam útil (0 Votos)

Leia também