How to Install SABnzbd in Docker

If you’re diving into the world of Usenet, you’ll learn of SABnzbd existence immediately and for good reason. While tools like Radarr and Sonarr handle the what and when part of downloading, SABnzbd takes care of the how. SABnzbd is the download engine that grabs NZB files from your indexer, handles repairs and unpacking, and drops the final product into your media library.

And the best part? It just works. Once configured, SABnzbd hums quietly in the background, handling downloads with zero fuss.


Why SABnzbd Is a Core Part of Your Media Stack

Here’s why SABnzbd remains a fan favorite:

  • 100% Free and Open Source – No premium licenses or paywalls. It’s fully featured out of the box.
  • Handles Everything Automatically – SABnzbd can repair, extract, and even clean up files after download using built-in tools like par2 and unrar.
  • Custom Categories – Create custom routing rules for different media types so that Radarr, Sonarr, and Lidarr can each get their own download folders.
  • Web Interface – Clean, responsive UI for managing and monitoring downloads from any device.
  • API + Script Support – Want to customize behavior? SABnzbd supports post-processing scripts and integrates easily with tools like Radarr and Sonarr.

If you’re using Usenet, SABnzbd is the no-brainer choice for managing your downloads.


Why Run SABnzbd in Docker?

Docker makes SABnzbd easier to manage and more portable:

  • Cleaner Installs – No Python dependencies or package conflicts.
  • Effortless Updates – Updating is as easy as pulling the latest image.
  • Easy to Move – Need to switch servers? Just copy your config folder and go.
  • Better Separation – Keep your download service sandboxed from the rest of your system.

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 Radarr container using docker-compose.yml. In this post we will be adding Radarr to our existing docker-compose.yml that contains the settings for Sonarr. 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 Radarr Section:

services:

  #################################
  ##  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 (change this path!)  
      - ${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 (change this path!) 
      - ${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 (change this path!) 
      - ${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

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

Update the SABnzbd file paths as needed. Here’s what to change:

  • CONFIG_PATH=/docker → Root folder where Docker stores persistent files.

  • DOWNLOADS_PATH=/media/downloads → Root folder where your download client stores temp/incomplete files

Make sure the SABnzbd container access to the /downloads path.

Also update the timezone (TZ) to match yours.
Refer to: this list of valid timezones.


Step 4: Start SABnzbd

Bring your new SABnzbd container online:

docker compose up -d

Check it’s running:

docker ps

You should see sabnzbd in the list of containers:

CONTAINER ID   IMAGE                               COMMAND   CREATED          STATUS          PORTS                                         NAMES
c8d2c60a955b   lscr.io/linuxserver/sonarr:latest   "/init"   54 seconds ago   Up 53 seconds   0.0.0.0:8989->8989/tcp, [::]:8989->8989/tcp   sonarr
ff12a474a4fe   lscr.io/linuxserver/radarr:latest   "/init"   54 seconds ago   Up 53 seconds   0.0.0.0:7878->7878/tcp, [::]:7878->7878/tcp   radarr
d152d14e3fe3   lscr.io/linuxserver/sabnzbd:latest  "/init"   15 seconds ago   Up 11 seconds   0.0.0.0:8080->8080/tcp, [::]:8080->8080/tcp   sabnzbd

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: Set Up SABnzbd in Your Browser

Open a web browser and visit:

http://your-server-ip:8080

Follow the setup wizard to:

  • Add your Usenet provider’s server info
  • Set up download folders
  • Create categories like tv and movies
  • Configure API keys for Radarr and Sonarr

Once connected, SABnzbd becomes the download engine for your automated stack.


Step 7: Keep Your Docker Software Updated

To updat:

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, and SABnzbd will restart with the latest version, no reconfig needed.


In Closing

SABnzbd is the workhorse behind Usenet downloads. It’s reliable, fast, and customizable. When paired with Radarr and Sonarr, it forms the core of an automated media server setup.

By running it in Docker, you keep things clean, portable, and easy to maintain. Once set up, SABnzbd quietly handles the heavy lifting while your media library manages itself. Just how it should be.

If you’re serious about automation and want a hands-off experience with your downloads, SABnzbd is non-negotiable.