Guide
7 min read

Jellyfin Docker Troubleshooting: From Library Scans That Miss Files to Reading the Logs

Most Jellyfin problems are one of three things — a library scan that won't see files, hardware transcoding that isn't, or playback that fails. A path from symptom to the right log line.

Jellyfin Docker Troubleshooting: From Library Scans That Miss Files to Reading the Logs

Jellyfin in Docker generates a steady stream of "it's not working" that turns out to be one of three problems wearing different masks: the library scan doesn't see your files, hardware transcoding isn't actually engaging, or playback fails for a specific client. Each has a tell, and each has a log that confirms it. Here's the path from symptom to the right line.

Problem 1: the library scan misses files

You point Jellyfin at a folder full of media and the scan finds nothing, or half. In a container it's almost always one of:

  • Permissions — the path is bind-mounted but owned by a user the Jellyfin container can't read. Match the container's PUID/PGID to the files' owner. This is the same host-directory-ownership trap that bites every bind-mounted app.
  • Path mismatch — the path inside the container differs from the host path you think you set. Jellyfin scans the container path; verify what it actually sees, not what's on the host.
  • Naming — Jellyfin needs recognizable Show/Season/Episode or Movie (Year) structure. Files it can't parse get skipped silently.

Confirm in the scan log: it lists what it found and what it skipped. Read that before guessing.

Problem 2: hardware transcoding that isn't

The CPU melts during playback and you thought you enabled hardware transcoding. Two checks:

  • The render device is actually passed into the container (/dev/dri present) and the Jellyfin user is in the right group — the persistent GPU passthrough setup for Proxmox media servers.
  • The playback log shows the hardware encoder being used, not libx264 (software). If it says software, the device or the codec settings aren't right.

Best of all: arrange direct play so most sessions don't transcode at all.

Problem 3: playback fails on one client

It plays on the TV, fails on the phone (or vice versa). That's almost always a codec/container the client can't handle, forcing a transcode that then fails or stutters. The playback log names the source and target formats — read it and you'll see exactly where the conversion broke.

Reading Jellyfin's logs (the actual skill)

The recurring lesson: stop guessing, read the log. Jellyfin's logs are detailed and most "mystery" issues are stated plainly in them.

  • Scan issues → the library scan log (what was found/skipped/errored).
  • Playback/transcode issues → the FFmpeg/playback log (source format, target, encoder).
  • Container won't start / crashes → docker logs first, then the app log.

This logs-process-IO troubleshooting flow generalizes well beyond Jellyfin — see container-first Linux troubleshooting.

Troubleshooting checklist

  • Scan finds nothing → PUID/PGID and the container path; check the scan log.
  • CPU pinned on playback → /dev/dri present; playback log shows hw encoder.
  • Fails on one client → codec/container mismatch in the playback log.
  • Always: read the relevant log before changing settings.

Takeaway

Jellyfin troubleshooting is mostly three problems and one habit. Fix scans with permissions, container paths, and naming; fix transcoding by verifying the device is passed in and the log shows the hardware encoder; fix client playback by reading the format mismatch in the log. The habit — read the log first — solves more than any setting you'll toggle blindly.

jellyfin
docker
troubleshooting
transcoding
media-server

Keep reading

Guide
8 min

Media servers moved into VMs and containers need mount and client-resume proof before family users rely on them

Fresh Jellyfin, Plex, and media-server threads show that a media stack can look installed while still failing at the boundary users actually hit. One Jellyfin user runs the server in a NAS container and can start playback, but the desktop app on Bazzite…

Guide
8 min

NAS-hosted Jellyfin failures cluster around bind mounts, library state, and update rollback

Fresh Jellyfin and self-hosting posts show the same operator pain from multiple angles: the media server is running, but the boundary between Docker, NAS paths, and app state is fragile. One new self-hoster cannot deploy a Portainer/Jellyfin stack because…

Guide
8 min

Plex-to-Jellyfin migrations need library integrity and client-connection checks before the cutover

Fresh Jellyfin and Immich threads show that media-server migration risk is not only about copying files. One user is moving from Plex to Jellyfin and sees music albums missing even though folders, permissions, and rescans look right. Another has Roku clients…

Guide
7 min

An Arr-Stack Deployment Map: Where Sonarr, Downloaders, and Jellyfin Should Live

The arr stack breaks for beginners before the first deploy — nobody tells them where the torrent client, bind mounts, and media server should actually live. A deployment map that keeps paths consistent.

Guide
7 min

Your First Home Server: The OS and Storage Decisions That Decide Everything

Beginners can install one app, then stall on the questions that actually matter: which operating model, where the data lives, and what survives growth. A first-week path that won't trap you.

Guide
6 min

Jellyfin on Linux: Choosing Between Docker Compose, Portainer, and a Template

Beginners stall on the first decision — how to actually deploy Jellyfin. Raw Compose, Portainer's UI, or a one-click template? A clear comparison so you pick once and move on.