http://your-server-ip:9696 once the container is running.I run this exact Compose stack on a Debian 12 box with the LinuxServer.io images, alongside Sonarr, Radarr, and SABnzbd on the same media_network bridge. The config below is what’s actually running, not a copy-paste from someone’s gist.
What is Prowlarr?
Prowlarr is the index and download manager for your media server. It’s the glue between your torrent and Usenet sources and the Arr apps (Sonarr, Radarr, Lidarr, Readarr). Set up your indexers and downloaders once in Prowlarr, and it pushes them out to every Arr app over the API.
Here’s what it does day to day:
- Connects to public and private torrent trackers, plus Usenet indexers.
- Wires your local downloaders (qBittorrent, SABnzbd, NZBGet) into the Arr apps.
- Centralizes every connection and monitors them for availability.
- Syncs indexers to your other Arr apps automatically.
- Categorizes indexers by media type (TV, movies, music) and sends them to the right app.
- Gives you one dashboard for every source your automation relies on. And when an indexer dies, Prowlarr tells you before Sonarr does.
Why You Should Use Prowlarr
Running a media server without Prowlarr means logging into Sonarr, then Radarr, then Lidarr, pasting the same API key into each one, then doing it all again when an indexer changes its URL. Fine for a weekend. Painful by month three.
Here’s what you get:
- Saves time. Add an indexer or downloader once. No more copy-pasting API keys and login info across three or four apps.
- Reduces errors. When one app works and another doesn’t, the culprit is usually a stale or misconfigured indexer. Prowlarr keeps them aligned.
- Monitors health. You find out an indexer went offline today, not a week later when you’re missing the new episode of your show.
- Supports everything. Private trackers, paid Usenet, free public indexers. Prowlarr handles all of them.
One messy manual setup becomes one clean, scalable system.
Step 1: Install Docker
You’ll need Docker installed on your server first. Walkthrough: Master the Basics - How to Install Docker
Step 2: Create or Modify Your Docker Compose File
Define the Prowlarr container in docker-compose.yml. The file below runs Prowlarr on its own. Already running the rest of the stack (say, from my Sonarr guide)? Just drop the prowlarr: service into your existing services: block and reuse the same media_network instead of pasting the whole thing.
Open the Compose File
Open your existing docker-compose.yml or create a new one:
nano /docker/docker-compose.yml
Paste this in:
services:
#################################
# PROWLARR
#################################
prowlarr:
# Official LinuxServer.io Prowlarr image
image: lscr.io/linuxserver/prowlarr:latest
# Friendly name for the container
container_name: prowlarr
# Pulls PUID, PGID, UMASK, TZ, ports, and paths from the .env file
env_file: .env
ports:
# Maps the host port to Prowlarr's web UI (9696) inside the container
- ${PROWLARR_PORT}:9696
volumes:
# Prowlarr's config and database (persists across restarts)
# Prowlarr only manages indexers, so it needs no media or downloads mounts
- ${CONFIG_PATH}/prowlarr:/config
healthcheck:
# Lets `docker ps` show "healthy" once the UI starts answering
test: wget --no-verbose --tries=1 --spider http://localhost:9696/ping || exit 1
start_period: 30s
timeout: 3s
interval: 30s
retries: 3
networks:
# Joins the shared media network so it can reach Sonarr/Radarr by name
- media_network
# Restart automatically unless you stop it yourself
restart: unless-stopped
#################################
# NETWORK
#################################
networks:
media_network:
# Shared network, created once with: docker network create media_network
name: media_network
external: true
Tip: Spacing matters. YAML is picky. Two-space indents only. No tabs.
Step 3: Customize the .env File
Open the .env File
nano /docker/.env
The contents should look like this:
# User and Group ID (Prevents permission issues)
# Main user ID
PUID=1000
# Main group ID:
PGID=1001
# File permission mask
UMASK=0007
# Timezone (Ensures correct scheduling and logs)
TZ=America/Denver
# Define Ports (Ports for each container are defined here)
RADARR_PORT=7878
SONARR_PORT=8989
SABNZBD_PORT=8080
PROWLARR_PORT=9696
BAZARR_PORT=6767
# Data Directories (Keeps storage paths centralized)
CONFIG_PATH=/docker
DOWNLOADS_PATH=/downloads
MEDIA_PATH=/media/Storage
Step 4: Start Prowlarr
The Compose file attaches to an external network called media_network, so create it once before you bring the stack up:
docker network create media_network
Bring the stack online:
docker compose up -d
Confirm the container is running:
docker ps
You should see prowlarr in the list:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
604d2ed3850c lscr.io/linuxserver/prowlarr:latest "/init" 6 seconds ago Up 5 seconds (healthy) 0.0.0.0:9696->9696/tcp, [::]:9696->9696/tcp prowlarr
If the container exits a few seconds after up -d, check the logs:
docker logs prowlarr
Permission errors on /config are the usual culprit. Step 5 fixes that.
Step 5: Fix Permissions (If Needed)
Permissions are the number-one snag with media containers. Make sure your user and the media group own everything the containers touch:
sudo chown -R `yourusername`:media /docker/ && sudo chmod -R 770 /docker/
sudo chown -R `yourusername`:media /media/ && sudo chmod -R 770 /media/
Want the full background on Linux permissions and why PUID/PGID matter?
Master the Basics - Linux Permissions
Step 6: Access and Set Up Prowlarr in Your Browser
Open a browser and go to:
http://your-server-ip:9696
The setup wizard walks you through:
- Adding your Usenet and torrent indexers
- Linking your downloader (qBittorrent, SABnzbd, or NZBget) via API
- Linking Sonarr, Radarr, Lidarr via API
- Setting categories (movies to Radarr, TV to Sonarr, and so on)
- Turning on Sync so Prowlarr pushes indexers automatically
Once that’s wired up, Prowlarr becomes the single place to update every indexer in your stack.
Step 7: Keep Your Docker Software Updated
To update:
docker compose pull # Fetches the latest image
docker compose down # Stops and removes the running container
docker compose up -d # Starts a fresh container with the new image
Prowlarr comes back up on the latest image. No reconfig needed.
In Closing
Prowlarr plugs the biggest gap in the Arr automation chain. It keeps indexers and downloaders consistent, online, and in sync with the rest of your stack. Run it in Docker and stop touching it.
Next move: pin the LinuxServer.io image to a known-good tag (e.g. lscr.io/linuxserver/prowlarr:1.21) once you’re happy with the setup. latest is convenient until the day it isn’t.
Building the whole automation stack rather than one app at a time? The complete arr stack Docker Compose guide wires Prowlarr, Radarr, Sonarr, and Bazarr together in a single file.

Running the whole Arr suite? Stand up Prowlarr, Radarr, Sonarr, and Bazarr from one Docker Compose file, with a fast download drive and clean imports into your media pool.

