// Technical guide // Docker · LXC Updated:

Docker vs LXC on Proxmox VE:
differences and when to use which

Both isolate processes with namespaces and cgroups and share the host kernel. The operational model is what diverges: Docker packages an application as an OCI image, while LXC is a system container that Proxmox manages like a lightweight VM. Here is what that means in a cluster.

// Table of Contents
  1. Application vs system container
  2. Comparison table on Proxmox VE
  3. Three ways to run Docker in the cluster
  4. Network, data, backup and HA
  5. When Docker, when LXC, when a VM
// 01 · Container model

Application vs system container

LXC and Docker stand on the same Linux foundation: namespaces (PID, mount, net, UTS, IPC, user) and cgroups. Neither boots its own kernel — this is not KVM. They diverge where the lifecycle starts.

LXC is a system container. Inside you get a full userspace: systemd as PID 1, packages, users, cron, several services at once. On Proxmox VE it is a first-class guest type — you create a CT in the GUI or with pct, give it an IP on a bridge, back it up with PBS. Security and bind mounts are covered in LXC containers in Proxmox.

Docker is an application container. A typical OCI image runs one main process (or a small process set) and is built in layers from a Dockerfile. You pull images from a registry, compose stacks, or orchestrate with Kubernetes. Proxmox has no “Docker” guest type — you install the engine in a VM, in nested LXC, or — which we do not recommend — directly on the host.

ℹ️

“One process” is a convention, not a law of physics. An image can start supervisord or even systemd. Docker’s point is packaging the app and a layered filesystem, not a ban on multiple processes.

// 02 · Comparison

Comparison table on Proxmox VE

FeatureDockerLXC on Proxmox
ModelApplication container (OCI)System container
PID 1Application process (typical)init / systemd
ImagesOCI registry, layersCT templates (pveam)
Proxmox guestNo — engine in a VM or CTYes (pct, GUI, firewall)
NetworkDocker bridge, NAT, overlayvmbr / VLAN / SDN like a VM
Dataoverlay2, volumes, bindrootfs + bind mount (mp)
Live migrationNo (recreate the container)No (restart migration)
Cluster HAOutside Proxmox (Compose/k8s)HA with CT restart
PBS backupNot directlyYes (rootfs; bind mounts separately)
Guest OSLinux on a Linux hostLinux only

Neither replaces a VM where you need your own kernel or Windows. Empty LXC RAM overhead is minimal — a clean Debian 13 CT is about 16 MB versus about 213 MB as a VM; numbers and context are in VM vs container: RAM usage. Docker still adds a daemon and image layers — density depends on how many containers share one engine, not on “container vs VM” alone.

// 03 · Docker on Proxmox

Three ways to run Docker in the cluster

Proxmox does not forbid Docker. You choose where the engine runs — and that choice decides isolation, backup and HA.

⚠️

Note: keep unprivileged LXC as the default. Making a CT privileged “so Docker finally works” maps container root to host root — a bad trade. If nesting in unprivileged is not enough, move the engine into a VM.

// 04 · Operations

Network, data, backup and HA

LXC gets an address on vmbr, a VLAN tag or SDN — on the wire it looks like a small VM. Docker sits behind the docker0 bridge by default and publishes ports; overlay and macvlan are another layer that Proxmox does not see as a guest.

LXC backup goes through PBS or vzdump (rootfs; bind mounts separately, as in the LXC article). Docker backup is images in a registry plus volumes — PBS will capture them only if the engine lives in a VM or CT whose rootfs includes that data. A Compose file is not a volume backup.

Cluster HA covers CTs and VMs. A running LXC cannot be live-migrated — Proxmox does a restart migration. A Docker container does not live-migrate either: you recreate it on another node (Compose, Swarm, Kubernetes). The difference: with LXC, failover sits in Proxmox ha-manager; with Docker in a VM, failover is the whole machine that holds the engine.

// 05 · Choice

When Docker, when LXC, when a VM

In one Proxmox cluster the three layers coexist: LXC for dense services, Docker in a VM for application stacks, full KVM where the kernel or Windows is non-negotiable. You are not choosing “a container platform instead of Proxmox” — you pick the tool per workload.

💡

In practice: after a VMware migration we put simple Linux services on LXC first, and leave existing Docker/Kubernetes stacks in VMs. Nesting in a CT stays for labs and for services that deliberately accept a restart instead of live migration.

We’ll map LXC, Docker and VMs

We’ll help decide which services go into a native CT, which stay as Docker in a VM, and which need full KVM — with PBS backup and HA.

⚡ Free consultation → LXC containers in Proxmox