One of the most common questions from Plex users building a new server: Docker or bare metal? The internet will give you passionate advocates for both. Here's the practical answer from someone who's fixed hundreds of both.
Bare Metal: The Simple Choice
Install Plex directly on your operating system. Download the installer, run it, point it at your media folder. Done.
Pros
- Simplest possible setup. No Docker knowledge needed, no compose files, no networking layers.
- Hardware access is automatic. GPU transcoding just works — no device passthrough to configure.
- Easier to troubleshoot. Logs, permissions, and paths are exactly where you'd expect.
- Marginally less overhead. No container layer between Plex and the OS (though the difference is negligible).
Cons
- Upgrades are messier. System package updates can break Plex dependencies.
- Harder to migrate. Moving to new hardware means reinstalling and reconfiguring.
- No isolation. Plex runs with system-level access. A Plex bug could theoretically affect other services.
Docker: The Flexible Choice
Run Plex inside a container using linuxserver/plex or the official plexinc/pms-docker image.
Pros
- Reproducible. Your entire config is a
docker-compose.ymlfile. Back it up, and you can recreate the server in minutes. - Easy migration. Copy the compose file + config volume to new hardware, run
docker compose up. - Isolated. Plex can't mess with your host OS. Other containers can't mess with Plex.
- Run everything together. Plex + Sonarr + Radarr + Bazarr + Overseerr + Tdarr, all as containers, all managed by one compose file.
Cons
- GPU passthrough is fiddly. You need
--device /dev/drifor Intel QSV or--gpus allwith NVIDIA Container Toolkit. Get it wrong and hardware transcoding silently fails. - Networking gotchas. Bridge mode can break remote access discovery. Host networking mode (
network_mode: host) fixes it but loses container isolation. - Permission hell. PUID/PGID mismatches cause "library can't scan" and "media not found" errors that stump beginners for hours.
- Plex claim token. First-run setup in Docker requires a claim token from plex.tv. Forget it and you can't sign in.
The Gotchas We Fix Most Often
Docker GPU passthrough not working
Symptoms: Hardware transcoding disabled in Plex, or it says "hardware transcoding is available" but still software-transcodes. The fix depends on your GPU:
- Intel QSV: Mount
/dev/driinto the container. Check that the render device (/dev/dri/renderD128) has the right permissions. User inside container needs to be in therenderorvideogroup. - NVIDIA: Install nvidia-container-toolkit on the host. Use
deploy: resources: reservations: devices: driver: nvidiain compose, not the old--gpusflag.
Remote access fails in Docker
Plex uses GDM (G'Day Mate) for local discovery. In bridge networking mode, GDM broadcasts don't escape the container network. Fix: use network_mode: host, or manually set the advertised IP in Plex's network settings and forward port 32400.
Library permissions
Container runs as user 1000, but media files are owned by root or another user. Plex can see the mount but can't read the files. Fix: set PUID=1000 PGID=1000 in your compose environment to match the media file owner.
Our Recommendation
New to Plex? Bare metal. Get it running first, learn the settings, then containerize later if you want.
Running other services (Sonarr, etc.)? Docker. The compose ecosystem is too good to pass up.
Unraid/TrueNAS? Docker is the default there. Use the community app (Unraid) or TrueCharts (TrueNAS SCALE).
Synology/QNAP? Use the native Plex package, not Docker. The NAS vendors optimize their packages for their hardware transcoding chipsets.
Need a Hand?
Whether you're setting up Plex fresh in Docker, migrating from bare metal, or debugging GPU passthrough — our Full Setup and Pro Build tiers cover exactly this. We'll get your compose stack running clean and optimized.