If you've got a pile of movies, ripped DVDs, or a music collection sitting on a hard drive, running your own media server is one of the more satisfying things you can do with a Proxmox box. You stop paying for another streaming app, you keep your library organized the way you want, and you can watch it from your phone, your TV, or a laptop on the other side of the world. Plex is the most popular way to do this, and it runs beautifully in a Proxmox VE LXC container.

This guide walks through building a lightweight Debian-based container, giving it access to your media folder, and installing Plex Media Server the same way you'd do it on a bare Debian box — just inside Proxmox. Everything here was tested on Proxmox VE 8.x and 9.x with a Debian 12 template, and the commands should work the same on Ubuntu 22.04 or 24.04 templates too.

What You Will Learn

  • What an LXC container is and why it's a good fit for Plex
  • How to create a Debian-based container sized correctly for a media server
  • How to give that container access to your media files on the host
  • How to install Plex Media Server from its official repository
  • How to claim your server and point it at your library
  • The permission error almost everyone hits on their first try, and how to fix it

What Is This Feature?

Plex Media Server is a piece of software that scans your video, music, and photo files, pulls in artwork and metadata, and organizes everything into a Netflix-style interface. Once it's running, you can stream your library to the Plex apps on your phone, smart TV, game console, or web browser — inside your home network or, if you enable remote access, from anywhere.

An LXC container, short for Linux Container, is Proxmox's lightweight way of running an isolated Linux environment. Unlike a full virtual machine, an LXC container shares the host's Linux kernel instead of emulating its own hardware. That means it starts in a second or two, uses less RAM for the same workload, and gets closer to native disk and CPU performance. For something like Plex, which mostly needs fast access to storage and occasional CPU bursts for transcoding, that overhead difference actually matters.

Why Would You Use It?

You could install Plex directly on the Proxmox host, but Proxmox's own documentation tells you not to run extra software on the host system — it's meant to stay a clean hypervisor. A dedicated VM would work too, but it carries more memory overhead for no real benefit here, since Plex doesn't need its own kernel or a full virtualized hardware stack.

An LXC container splits the difference nicely. It's isolated from your other services, easy to back up as a single unit with vzdump, and cheap enough on resources that you can run it alongside a dozen other small containers on the same node. If Plex ever misbehaves or you want to reinstall from scratch, you delete one container and start over — nothing else on your Proxmox host is affected.

Prerequisites

  • A working Proxmox VE 8.x or 9.x installation with free storage for a new container
  • A Debian 12 (or Ubuntu 22.04/24.04) LXC template downloaded on your node
  • A folder of media files somewhere accessible to the Proxmox host — a local disk, a ZFS pool, or an NFS/SMB share already mounted on the host
  • At least 2 CPU cores and 2 GB of RAM free for the container (4 GB is more comfortable if you'll transcode more than one stream at once)
  • A Plex account, which is free to create at plex.tv

You don't need a GPU for this guide. Hardware-accelerated transcoding is a separate, more advanced setup involving PCI passthrough — this tutorial covers software transcoding and direct play, which is what most home libraries actually use day to day.

Step-by-Step Tutorial

Step 1: Download the container template

In the Proxmox web interface, click your storage (usually local) in the left tree, open CT Templates, and click Templates. Search for "debian-12" and download the standard template. It's roughly 130 MB and only needs to be downloaded once per node — every container you create afterward reuses the same file.

Step 2: Create the container

Click Create CT in the top right. A few settings matter more than the rest:

  • Unprivileged container — leave this checked. It's the safer default and works fine for Plex.
  • Disk size — 8 GB is plenty, since your media stays outside the container.
  • Cores — 2 is a reasonable starting point.
  • Memory — 2048 MB minimum, 4096 MB if you expect multiple simultaneous streams.

Give it a static IP on your network in the Network tab rather than relying on DHCP — Plex works better when its address doesn't change, and you'll want a predictable URL for your apps to connect to.

Step 3: Give the container access to your media

This is the step people skip and then wonder why Plex can't see any files. Your media needs to live on a path the container can reach, and the cleanest way to do that is a bind mount point.

With the container stopped, go to its Resources tab, click Add > Mount Point, and set the source to the folder on your Proxmox host (for example /mnt/media) and the container path to something like /media. You can do the same thing from the shell on the host:

pct set 105 -mp0 /mnt/media,mp=/media

Replace 105 with your container's ID. This tells Proxmox to bind-mount the host folder straight into the container at boot — no NFS, no re-copying files, no wasted disk space.

Step 4: Start the container and open a shell

pct start 105
pct enter 105

pct enter drops you straight into a root shell inside the container without needing SSH set up first, which is the fastest way to run the next few commands.

Step 5: Install Plex Media Server

Update the package list and install the tools needed to add Plex's repository:

apt update
apt install -y curl gnupg

Add Plex's signing key and repository:

curl https://downloads.plex.tv/plex-keys/PlexSign.key | gpg --dearmor -o /usr/share/keyrings/plex-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/plex-archive-keyring.gpg] https://downloads.plex.tv/repo/deb public main" > /etc/apt/sources.list.d/plexmediaserver.list

Then install it:

apt update
apt install -y plexmediaserver

The package is around 100 MB and pulls in a handful of dependencies. Once it finishes, Plex starts automatically as a systemd service.

Step 6: Open Plex and claim your server

From a browser on your network, go to http://<container-ip>:32400/web. The first time you load it, Plex will ask you to sign in and "claim" the server — this just links it to your Plex account so it shows up in your apps.

Step 7: Add your library

In the Plex setup wizard, choose Add Library, pick a type (Movies, TV Shows, Music), and point it at the folder path you mounted earlier — /media, or a subfolder like /media/movies if you've organized it that way. Plex will start scanning and pulling in poster art and metadata, which can take anywhere from a couple of minutes to a couple of hours depending on how large your library is.

Commands Explained

CommandWhat it does
pct createCreates a new LXC container from a template
pct set 105 -mp0 ...Adds a bind mount point to container 105 so it can see a host folder
pct start 105Boots container 105
pct enter 105Opens a root shell inside container 105 directly from the host
gpg --dearmorConverts Plex's signing key into the binary format apt expects
apt install -y plexmediaserverInstalls Plex and starts its systemd service automatically

Common Errors

Plex can see the folder but every file shows a permission error. This is the single most common issue, and it comes down to how unprivileged containers map user IDs. Inside an unprivileged container, root is actually mapped to a high UID on the host (typically starting at 100000), so if your media files are owned by your regular host user, the container's Plex process can't read them. The fix is usually to make the mounted folder world-readable on the host with chmod -R a+rX /mnt/media, or to set up a proper UID mapping in /etc/pve/lxc/105.conf. For a home setup, the chmod approach is far less fiddly.

"This device is not authorized" when trying to claim the server. This almost always means the container's clock is off, since Plex checks a signed token with a timestamp. Run date inside the container and compare it to the host — if they're more than a minute or two apart, install and enable chrony to sync time properly.

The web UI at port 32400 just times out. Double-check the container actually has an IP address with ip a, and confirm nothing on your router or a host-level firewall is blocking that port between your browser and the container's subnet.

Troubleshooting

Start with the service itself:

systemctl status plexmediaserver

If it shows "failed" or "inactive", check the logs for the actual error:

journalctl -u plexmediaserver -n 50

If the service is running but the library shows zero items after a scan, verify the mount point actually made it into the container:

ls -la /media

An empty result there means the bind mount isn't attached — go back and check the mount point configuration on the host with cat /etc/pve/lxc/105.conf, and make sure the source path you typed actually exists.

Best Practices

Keep your media on its own dataset or disk, separate from the container's root filesystem. That way you can resize storage, move it to faster disks, or reinstall the container entirely without touching your actual files.

Back up the container regularly with vzdump, but don't bother backing up the media mount point itself through Proxmox — back that up separately with whatever tool fits a large media library, since vzdump snapshots aren't really built for multi-terabyte datasets.

Leave the container unprivileged unless you have a specific reason not to. Privileged containers can access host devices more freely, which sounds convenient until a bug in the containerized software becomes a much bigger problem than it needed to be.

If your Plex library grows and transcoding starts pegging the CPU, that's usually a sign to either enable hardware transcoding through GPU passthrough or just set your Plex apps to "Direct Play" when the network allows it, which skips transcoding entirely.

Frequently Asked Questions

Do I need a Plex Pass to use this setup?

No. A free Plex account covers local streaming, library organization, and apps on most devices. Plex Pass adds extras like hardware transcoding and mobile sync, but it's not required to get a working media server.

Can I run Plex in a VM instead of an LXC container?

Yes, and some people prefer it for the extra isolation. You'll just use more RAM for the same result, since a VM needs its own kernel and virtualized devices where a container doesn't.

Should the container be privileged to access my media?

No — an unprivileged container with a bind mount point works fine. Privileged containers are rarely necessary for a Plex setup and carry more risk if something in the container is ever compromised.

Why is Plex transcoding using so much CPU?

Transcoding happens whenever a client can't play the file's original format directly, which is common with 4K content on older TVs or phones on cellular data. Two vCPUs can usually handle one transcode; a lot more content or multiple simultaneous streams will need more cores or hardware acceleration.

Can I access my Plex server outside my home network?

Yes, through Plex's own remote access feature, which you enable from Settings > Remote Access inside Plex itself. It typically works through automatic port mapping, though your specific router setup can affect how reliably it connects.

Conclusion

Once it's set up, a Plex container on Proxmox pretty much runs itself — you add files to your media folder, Plex picks them up on its next scan, and that's it. The setup takes maybe twenty minutes the first time, most of it spent waiting for the initial library scan to finish. If you hit the permission error on your media mount, that's normal; nearly everyone does on their first unprivileged container, and now you know exactly where to look.