How to Install Prowlarr in Docker

What is Prowlarr?

Prowlarr is the download and index manager for your media server. Think of it as the glue between your torrent/Usenet sources and the Arr apps like Sonarr, Radarr, and Lidarr. Instead of configuring downloaders and indexers manually in every app, you set them up once in Prowlarr.

Here’s how it works:

  • It connects to public and private torrent trackers, and/or Usenet indexers.
  • It connects your loacal downloaders to the ARR apps.
  • It centralizes these connections and monitors them for availability.
  • It automatically syncs these indexers to your other Arr apps using API connections.
  • It lets you categorize indexers by media type (TV, movies, music) and push them to the right apps.
  • You log into one dashboard to manage every source your automation relies on. And when something goes wrong with an indexer? Prowlarr lets you know.

Why You Should Use Prowlarr

Running a media server without Prowlarr is like trying to drive a car without tires. You can sort of do it, but why?

Here’s why you want it:

  • Saves Time: Add an indexer or downloader once. That’s it. No more copy/paste API keys and login info three or more times.
  • Reduces Errors: When one app works and another doesn’t, the culprit is often a misconfigured or outdated indexer. Prowlarr fixes that.
  • Monitors Health: Know immediately when an indexer or downloader goes offline. You don’t find out a week later when you are missing your favorite show.
  • Supports Everything: Private trackers, paid Usenet, free public indexers—Prowlarr works with all of them.

It turns a messy, manual setup into a clean, scalable system that you can set and forget.


Step 1: Install Docker

To get started, you’ll need Docker installed on your server.
Check out this guide for step-by-step instructions: Master the Basics - How to Install Docker on Ubuntu 24.04.


Step 2: Create or Modify Your Docker Compose File

Let’s define your Prowlarr container using docker-compose.yml. In this post we will be adding Prowlarr to our existing docker-compose.yml that contains the settings for the rest of the stack. Post: How to Install Sonarr in Docker

Open the Compose File

Open your existing docker-compose.yml or create a new one:

nano /docker/docker-compose.yml

Then, copy and paste the SABnzbd Section:

services:

  #################################
  ##  PROWLARR                   ##
  #################################
  prowlarr:
    # Official Linuxserver.io Prowlarr image
    image: lscr.io/linuxserver/prowlarr:latest
    # Sets a custom name for the container
    container_name: prowlarr
    # Name and location of the .env file
    env_file: .env
    # Ensures the container restarts if it crashes
    restart: unless-stopped
    ports:
      - ${PROWLARR_PORT}:9696
    volumes:
      # Stores Sonarr's configuration data
      - ${CONFIG_PATH}/sonarr:/config
    environment:
      - PUID=${PUID}
      - PGID=${PGID}
      - TZ=${TZ}
    networks:
      # Connects the container to the custom media network  
      - media_network

  #################################
  ##  SONARR                     ##
  #################################
  sonarr:
    # Official LinuxServer.io Sonarr image
    image: lscr.io/linuxserver/sonarr:latest
    # Sets a custom name for the container
    container_name: sonarr
    # Name and location of the .env file
    env_file: .env
    # Ensures the container restarts if it crashes
    restart: unless-stopped
    ports:
      - ${SONARR_PORT}:8989
    volumes:
      # Stores Sonarr's configuration data 
      - ${CONFIG_PATH}/sonarr:/config
      # Directory where downloaded TV shows are stored  
      - ${MEDIA_PATH}/Shows:/tv
      # Directory where incomplete downloads are stored  
      - ${DOWNLOADS_PATH}:/downloads
    environment:
      - PUID=${PUID}
      - PGID=${PGID}
      - TZ=${TZ}
    networks:
      # Connects the container to the custom media network  
      - media_network

  #################################
  ##  RADARR                     ##
  #################################
  radarr:
    # Official LinuxServer.io Radarr image
    image: lscr.io/linuxserver/radarr:latest
    # Sets a custom name for the container
    container_name: radarr
    # Name and location of the .env file
    env_file: .env
    # Ensures the container restarts if it crashes
    restart: unless-stopped
    ports:
      - ${RADARR_PORT}:7878
    volumes:
      # Stores Radarr's configuration data
      - ${CONFIG_PATH}/radarr:/config
      # Directory where downloaded Movies are stored  
      - ${MEDIA_PATH}/Movies:/movies
      # Directory where incomplete downloads are stored
      - ${DOWNLOADS_PATH}:/downloads
    environment:
      - PUID=${PUID}
      - PGID=${PGID}
      - TZ=${TZ}
    networks:
      # Connects the container to the custom media network  
      - media_network

  #################################
  ##  SABnzbd                    ##
  #################################
  sabnzbd:
    # Official LinuxServer.io SABnzbd image
    image: lscr.io/linuxserver/sabnzbd:latest
    # Sets a custom name for the container
    container_name: sabnzbd
    # Name and location of the .env file
    env_file: .env
    # Ensures the container restarts if it crashes
    restart: unless-stopped
    ports:
      - ${SABNZBD_PORT}:8080
    volumes:
      # Stores SABnzbd's configuration data
      - ${CONFIG_PATH}/sabnzbd:/config
      # Directory where incomplete downloads are stored
      - ${DOWNLOADS_PATH}:/downloads
    environment:
      - PUID=${PUID}
      - PGID=${PGID}
      - TZ=${TZ}
    networks:
      # Connects the container to the custom media network  
      - media_network

#################################
##  NETWORK                    ##
#################################
# Creates an isolated Docker network for media containers
networks:
  media_network:
    driver: bridge

💡 Tip: Make sure the spacing is correct. YAML is very picky about spacing. The key is that each indent is two spaces not a tab.


Step 3: Customize the .env File

Open the .env File

nano /docker/.env

The content of the .env file should look like this:

# User and Group ID (Prevents permission issues)
# Main user ID
PUID=1000
# Our media group:
PGID=1001

# Timezone (Ensures correct scheduling and logs)
TZ=America/Denver

# Define Ports (Ports for each container are defined here)
# Maps Radarr’s web UI to port 7878 on the host
RADARR_PORT=7878
# Maps Sonarr’s web UI to port 8989 on the host
SONARR_PORT=8989
# Maps SABnzbd’s web UI to port 8080 on the host
SABNZBD_PORT=8080
# Maps Prowlarr's web UI to 9696
PROWLARR_PORT=9696

# Data Directories (Keeps storage paths centralized)
CONFIG_PATH=/docker
DOWNLOADS_PATH=/media/downloads
MEDIA_PATH=/media

Step 4: Start SABnzbd

Bring your new SABnzbd container online:

docker compose up -d

Check it’s running:

docker ps

You should see prowlarr in the list of containers:

CONTAINER ID   IMAGE                                 COMMAND   CREATED         STATUS         PORTS                                         NAMES
65470f79b320   lscr.io/linuxserver/radarr:latest     "/init"   6 seconds ago   Up 5 seconds   0.0.0.0:7878->7878/tcp, [::]:7878->7878/tcp   radarr
3e96643b0ba9   lscr.io/linuxserver/sabnzbd:latest    "/init"   6 seconds ago   Up 5 seconds   0.0.0.0:8080->8080/tcp, [::]:8080->8080/tcp   sabnzbd
604d2ed3850c   lscr.io/linuxserver/prowlarr:latest   "/init"   6 seconds ago   Up 5 seconds   0.0.0.0:9696->9696/tcp, [::]:9696->9696/tcp   prowlarr
52c78c78f541   lscr.io/linuxserver/sonarr:latest     "/init"   6 seconds ago   Up 5 seconds   0.0.0.0:8989->8989/tcp, [::]:8989->8989/tcp   sonarr

Step 5: Fix Permissions (If Needed)

Permissions issues are a common snag with media containers. Here’s how to make sure everything plays nice:

sudo chown -R `yourusername`:media /docker/ && sudo chmod -R 770 /docker/
sudo chown -R `yourusername`:media /media/ && sudo chmod -R 770 /media/

Check out this post if you want to learn more about Linux permissions:
Master the Basics - Linux Permissions


Step 6: Access and Set Up Prowlarr in Your Browser

Open a web browser and visit:

http://your-server-ip:9696

Follow the setup wizard to:

  • Add your Usenet and torrent indexers
  • Link your downloader (qBittorent, SABnzbd, or NZBget) via API
  • Link Sonarr, Radarr, Lidarr via API
  • Set up categories (movies → Radarr, TV → Sonarr, etc.)
  • Turn on Sync to push indexers automatically

Once connected, Prowlarr becomes the single point to update these apps 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

Radarr, Sonarr, SABnzbd, and Prowlarr will restart with the latest version, no reconfig needed.


In Closing

Prowlarr plugs a gap in the automation chain. It keeps indexers and downloaders consistent, online, and working with your stack. Run it in Docker and forget about it. You’ll spend less time troubleshooting and more time enjoying your media.

Want a real hands-off setup? Prowlarr is the piece you’re missing. Install it. Sync it. Forget it.

Need a new HDD to keep up with your downloads?

Western Digital 14TB Internal Hard Drive

Buy it Now:

Buy on Newegg Buy on Amazon