Radarr — Automated Movie Management in Docker

Radarr — Automated Movie Downloads

Radarr is the movie half of the arr stack. You tell it what films you want, it searches your indexers through Prowlarr, sends the release to qBittorrent or SABnzbd, waits for it to finish, renames the file, moves it into your library, and tells Plex or Jellyfin to scan. This guide walks through deploying it with Docker Compose and configuring it for first use, including hooking up both qBittorrent and SABnzbd as download clients.

Prerequisites

  • Prowlarr running and configured with at least one indexer — Radarr asks Prowlarr for search results rather than talking to indexers directly
  • A download client — qBittorrent (behind Gluetun for VPN), SABnzbd, or both
  • A movies dataset on your TrueNAS pool, e.g. /mnt/tank/media/movies
  • The downloads folder mounted the same way in both Radarr and your download client — this is the most common source of import failures

Step 1: Write the docker-compose.yml

Create /mnt/tank/stacks/radarr/docker-compose.yml:

services:
  radarr:
    image: lscr.io/linuxserver/radarr:latest
    container_name: radarr
    environment:
      - PUID=568
      - PGID=568
      - TZ=Europe/London
    volumes:
      - /mnt/tank/configs/radarr:/config
      - /mnt/tank/media/movies:/movies
      - /mnt/tank/downloads:/downloads
    ports:
      - 7878:7878
    restart: unless-stopped

Adjust PUID/PGID to match the user that should own the config and media files (this NAS uses 568:568 for all app data — run id on your own host to check), and point the volumes at whatever paths you use for movies and downloads.

Step 2: Start the container

cd /mnt/tank/stacks/radarr
docker compose up -d
docker compose logs -f radarr

Radarr will be available at http://<your-nas-ip>:7878 within a few seconds.

Volume paths matter. The /downloads path inside Radarr must be identical to the path inside your download client. If qBittorrent or SABnzbd saves to /downloads/complete and Radarr looks in /downloads/complete, imports happen instantly via hardlink. If the paths differ, Radarr has to copy the file instead, which is slow and wastes disk space.

Step 3: First-time setup

3a — Set your media management paths

Go to Settings → Media Management. Add a root folder pointing to /movies (the path inside the container, not the host path). This is where Radarr will move finished downloads.

Radarr Media Management settings page

While you’re here, enable:

  • Rename Movies — lets Radarr tidy up filenames into a consistent format
  • Use Hardlinks instead of Copy — critical for seeding torrents while also having the file in your library

3b — Add your download client(s)

Go to Settings → Download Clients → +. You can add more than one client — Radarr routes to whichever one’s category matches the release, so there’s no harm running qBittorrent and SABnzbd side by side.

Radarr Download Clients settings page

qBittorrent

  • Host: localhost (if qBittorrent uses network_mode: container:gluetun and Radarr does not, use the host IP instead)
  • Port: 8080
  • Username / Password: whatever you set in qBittorrent
  • Category: radarr — keeps Radarr’s downloads separate from other apps

SABnzbd

  • Host: the SABnzbd container name if it’s on the same Docker network (e.g. sabnzbd), otherwise the NAS IP
  • Port: 8080 — SABnzbd’s default web UI port
  • API Key: copy it from SABnzbd’s Config → General → API Key field
  • Category: movies — use the same category you created in Config → Categories during the SABnzbd setup guide, so completed NZBs land in the matching subfolder automatically

Click Test before saving on either client — a failed test almost always means a port, host, or API key mismatch.

3c — Connect Prowlarr

The easiest way: in Prowlarr go to Settings → Apps → + and add Radarr. Prowlarr will automatically sync all your indexers across — you don’t need to configure indexers in Radarr at all.

Prowlarr Settings Apps page with Radarr added

3d — Create quality profiles

Go to Settings → Profiles. The defaults are fine to start with. A common setup:

Radarr Quality Profiles settings page

3e — Add your first movie

Go to Movies → Add New, search for a title, pick your quality profile and root folder, then click Add Movie. If you want it now, click Search — otherwise Radarr will grab it automatically when a matching release appears.

How the import pipeline works

Seerr
Request interface

request↓

Prowlarr
Indexer manager

SABnzbd
Usenet downloads

🔒 Gluetun (ProtonVPN) — all traffic via VPN
qBittorrent
Torrent client

indexers
NZB import
torrent import

Radarr
  • Movie automation
  • Standard + 4K
  • Hardlink on import

library refresh

Plex
Media server
Stream anywhere

Understanding this flow saves a lot of debugging time:

  1. Radarr searches Prowlarr for a release matching your quality profile
  2. It sends the .torrent or .nzb to whichever download client owns that category — qBittorrent or SABnzbd
  3. The download client finishes and calls Radarr’s webhook (or Radarr polls for it)
  4. Radarr finds the completed file in /downloads, checks it matches the movie
  5. It creates a hardlink in /movies/Movie Title (Year)/Movie Title (Year).mkv
  6. It triggers a library refresh in Plex / Jellyfin via the connection you configure in Settings → Connect

The hardlink means the torrent keeps seeding from /downloads while your media server plays the file from /movies — both point to the same data on disk, no extra space used. NZBs from SABnzbd don’t seed, so this mainly matters for the qBittorrent side.

Useful commands

# Check logs for import errors
docker compose logs --tail 50 radarr

# Restart after a config change
docker compose restart radarr

# Check the container is healthy
docker inspect radarr --format "{{.State.Status}}"

Common problems

Problem Likely cause
Import stuck — “file is in use” Torrent still downloading or being checked
“Remote path mapping” error /downloads path differs between Radarr and the download client
Hardlinks not working /movies and /downloads are on different datasets or filesystems
SABnzbd download client test fails Wrong API key, or host/port unreachable from the Radarr container’s network
No search results Prowlarr not synced, or indexers require a login
Permission denied on import PUID/PGID not matching dataset ownership (should be 568:568)
Avatar photo

By admin

Leave a Reply

Your email address will not be published. Required fields are marked *