If virtual machines feel a little heavy for what you actually need — maybe you just want a lightweight Pi-hole, a small web server, or a place to run one background service — Proxmox has a much lighter option that starts in seconds instead of minutes: the LXC container. This guide walks you through creating your first Linux container in Proxmox VE, step by step, with no prior container experience required.
We'll explain what a container actually is, how it's different from a full virtual machine, and then build one together using both the Proxmox web interface and the command line.
What You Will Learn
- What an LXC container is and how it differs from a virtual machine
- When you should choose a container instead of a VM
- How to download a container template in Proxmox VE
- How to create a container using the web interface wizard
- How to create the same container from the command line with
pct create - How to start, stop, and log into your new container
- Common errors and how to fix them
What Is This Feature?
LXC stands for Linux Containers. Unlike a virtual machine, which runs its own complete operating system and pretends to be a separate physical computer, a container shares the host's Linux kernel directly. It's an isolated environment — with its own filesystem, processes, and network interface — but it isn't simulating hardware the way a VM does.
Proxmox manages LXC containers through its own toolkit called PCT, short for Proxmox Container Toolkit. You'll see the pct command used throughout this guide — it's simply the container equivalent of the qm command you might already know for managing virtual machines.
Because a container doesn't have to boot a full kernel and virtual hardware layer, it starts almost instantly and uses noticeably less RAM and CPU than a comparable VM.
Why Would You Use It?
Containers aren't a replacement for virtual machines — they're a different tool for a different job. Here's how to think about the choice:
| Situation | Better Choice | Why |
|---|---|---|
| Running a single Linux service (web server, DNS ad-blocker, small app) | LXC Container | Starts fast, uses fewer resources, simple to manage |
| Running Windows, or an OS different from the host's kernel | Virtual Machine | Containers share the host's Linux kernel, so they can't run Windows or a different kernel |
| You need strong isolation for something you don't fully trust | Virtual Machine | VMs are more strictly isolated from the host than containers |
| You want the fastest possible boot time for a lightweight homelab service | LXC Container | Containers typically start in a couple of seconds |
In short: if you just need "a Linux box that does one thing," a container is usually the more efficient choice. If you need a different operating system, kernel-level customization, or strict isolation, reach for a virtual machine instead.
Prerequisites
- A working Proxmox VE 9.x installation with available storage space.
- Administrative access to the Proxmox web interface, usually at
https://your-server-ip:8006. - At least one storage location configured that supports container templates (the default local storage works fine for a first attempt).
- A basic idea of how much disk space, memory, and CPU you want to give the container — you can always adjust these later.
- SSH or console access to the Proxmox host if you plan to use the command-line method.
Step-by-Step Tutorial
Step 1: Download a Container Template
Unlike a VM, which you install from an ISO image, a container is built from a pre-made template — a compressed snapshot of a minimal Linux install (Debian, Ubuntu, Alpine, and others are all available).
Using the Web Interface
- In the left-hand tree, click your storage (for example, local).
- Click CT Templates.
- Click Templates to open the download list, choose a distribution such as Ubuntu or Debian, and click Download.
Using the Command Line
pveam update
pveam available
pveam download local ubuntu-24.04-standard_24.04-2_amd64.tar.zst
The exact template filename changes as new releases come out, so run pveam available first to see the current list and copy the exact name you want.
Step 2: Create the Container Using the Web Interface
- Click the Create CT button near the top-right of the Proxmox web interface.
- On the General tab, choose a hostname, set a root password (or add an SSH key), and note the CT ID — a unique number Proxmox uses to identify this container.
- On the Template tab, select the template you downloaded in Step 1.
- On the Disks tab, choose your storage and set a root disk size (8 GB is a reasonable starting point for a small service).
- On the CPU tab, set how many CPU cores to assign.
- On the Memory tab, set the RAM allocation — 512 MB to 1 GB is usually enough for a lightweight service.
- On the Network tab, choose a bridge (typically vmbr0) and either enable DHCP or set a static IP address.
- On the DNS tab, leave the defaults unless you have a specific DNS server you want to use.
- Review your settings on the Confirm tab, then click Finish.
Once creation completes, you'll see your new container listed in the left-hand tree.
Step 3: Create the Same Container from the Command Line
If you'd rather script this or just prefer the terminal, the same result can be achieved with a single pct create command:
pct create 200 local:vztmpl/ubuntu-24.04-standard_24.04-2_amd64.tar.zst \
--hostname my-container \
--storage local-lvm \
--rootfs local-lvm:8 \
--cores 1 \
--memory 1024 \
--net0 name=eth0,bridge=vmbr0,ip=dhcp \
--password
Adjust the CT ID (200), hostname, storage name, and resource values to match your own setup.
Step 4: Start the Container
From the web interface, select the container and click Start. From the command line:
pct start 200
Step 5: Log Into the Container
You can open a console directly from the Proxmox web interface by selecting the container and clicking Console, or connect from the command line on the Proxmox host itself:
pct enter 200
This drops you directly into a root shell inside the container, without needing a separate SSH connection.
Step 6: Resize the Container Later (Optional)
It's common to underestimate how much disk space a container will need. The good news is that you don't need to recreate the container from scratch to fix this — Proxmox lets you grow a container's root disk while it's running.
pct resize 200 rootfs +4G
This command adds 4 GB to the root filesystem of container 200. Note that Proxmox only supports growing disks this way, not shrinking them, so start conservatively and expand later rather than guessing too high up front.
Commands Explained
| Command | What It Does |
|---|---|
pveam update | Refreshes the list of container templates available for download from Proxmox's template repositories. |
pveam available | Lists all container templates you can currently download, along with their exact filenames. |
pveam download local <template> | Downloads a specific container template to the storage you name (here, local). |
pct create <id> <template> [options] | Creates a new container from a template, using the CT ID and options you specify, such as storage, CPU, memory, and network settings. |
pct start <id> | Boots the specified container. |
pct stop <id> | Forcefully stops the specified container, similar to pulling the power on a VM. |
pct enter <id> | Opens a root shell directly inside a running container from the Proxmox host. |
pct list | Shows all containers on the host along with their status. |
Common Errors
- "unable to find configuration file" or CT ID already in use. This means the CT ID you chose is already assigned to another VM or container. Pick a different, unused ID or check
pct listandqm listfor what's already taken. - "no such logical volume" when creating a container. This usually means the storage name you specified in
--rootfsor--storagedoesn't exist or doesn't support container root disks. Check your storage configuration under Datacenter > Storage. - Template not found. If
pct createcan't find your template, double-check the exact filename withpveam available— template filenames change with each new release and must match exactly. - Container has no network connectivity. This is often caused by selecting the wrong bridge, or the container's
net0settings not matching your actual network setup. Confirm the bridge name matches what's configured under Datacenter > Network on the Proxmox host.
Troubleshooting
- Check the container's status. Run
pct status <id>to confirm whether it's running, stopped, or in an error state. - Review the container's configuration. Run
pct config <id>to see its current settings, including memory, disk, and network configuration. - Check the Proxmox task log. The Task History panel at the bottom of the web interface shows the exact error message from any failed operation.
- Confirm storage has enough free space. Go to Datacenter > Storage and check that the target storage isn't full — container creation fails silently on some setups if there isn't enough room.
- Try creating the container again with a fresh template. If a downloaded template is corrupted or incomplete, delete it from CT Templates and download it again.
Best Practices
- Stick with unprivileged containers (the Proxmox default) unless you have a specific reason to use a privileged one — they're more isolated from the host and safer by default.
- Keep CT IDs organized, for example reserving ranges like 100–199 for VMs and 200–299 for containers, so you can tell them apart at a glance.
- Start with modest CPU and memory allocations and increase them later if needed — containers make resizing easy, and it's simpler to scale up than to have unused resources locked away from other VMs.
- Take a snapshot or backup before making major configuration changes to a container, just as you would with a VM.
- Run
pveam updateoccasionally so your template list includes the latest available distribution releases.
Frequently Asked Questions
Can I run Windows in an LXC container?
No. Containers share the host's Linux kernel, so they can only run Linux distributions. For Windows, you'll need a full virtual machine instead.
What's the difference between a privileged and unprivileged container?
An unprivileged container maps its internal root user to a regular, low-privilege user on the Proxmox host, which limits the damage possible if something inside the container is compromised. Proxmox creates unprivileged containers by default, and it's the recommended option for most use cases.
Can I convert a container into a virtual machine, or the other way around?
Not directly — they're fundamentally different technologies. If you need to switch, you'll typically reinstall your application inside a new VM or container of the type you actually need.
How do I delete a container I no longer need?
Select the container in the web interface, click More, then Remove, or run pct destroy <id> from the command line. Make sure you no longer need any data on it first, since this permanently deletes the container.
Do containers support snapshots and backups like virtual machines?
Yes. Both snapshots and the Proxmox backup system work with LXC containers in the same way they work with VMs, as long as your storage type supports snapshots.
Why does my container show a different CPU or memory usage than I expected?
Because containers share the host's kernel, some monitoring tools inside the container may report host-wide statistics rather than the container's own limits. This is a known quirk of container-based virtualization and doesn't mean your resource limits aren't being enforced — Proxmox still restricts the container to the CPU and memory values you configured.
Can I run Docker inside an LXC container?
It's technically possible with extra configuration, but it adds complexity and potential security trade-offs, especially with unprivileged containers. Many homelab users find it simpler to run Docker inside a dedicated virtual machine instead, and reserve LXC containers for single, lightweight services.
Conclusion
LXC containers are one of the most useful tools in Proxmox for running lightweight Linux services without the overhead of a full virtual machine. Once you've created your first container using the steps above, you'll likely find yourself reaching for containers by default for anything that doesn't specifically need a full VM. From here, a natural next step is exploring how to back up and snapshot your containers so your setup stays safe as you build on it.