If you’re getting into Usenet, you’ll run into SABnzbd fast. Radarr and Sonarr decide what to download and when. SABnzbd handles the how. It grabs NZB files from your indexer, repairs and unpacks them, then drops the finished files into your media library.
And the best part? Once it’s configured, it hums quietly in the background and you stop thinking about it.
Why SABnzbd Is a Core Part of Your Media Stack
Here’s why SABnzbd still wins:
- Free and open source. No premium licenses or paywalls. Fully featured out of the box.
- Handles everything automatically. Repair, extract, and cleanup using built-in
par2andunrar. - Custom categories. Route TV, movies, and music into separate folders so Sonarr, Radarr, and Lidarr each get their own pile.
- Web interface. Clean, responsive UI for managing and monitoring downloads from any device.
- API and script support. Post-processing scripts plus first-class integration with the *arr stack.
If you’re on Usenet, this is the download client you want.
Why Run SABnzbd in Docker?
Docker keeps SABnzbd clean and portable:
- Cleaner installs. No Python dependencies or package conflicts on the host.
- Effortless updates. Pull the latest image and recreate the container.
- Easy to move. Switching servers? Copy the config folder and the compose file. Done.
- Better separation. Your download service stays sandboxed from the rest of the system.
Step 1: Install Docker
You’ll need Docker on your server. If you don’t have it yet, follow this guide: Master the Basics - How to Install Docker
Step 2: Create or Modify Your Docker Compose File
Time to add SABnzbd to your stack. The file below runs SABnzbd on its own. Already running Sonarr and Radarr in a Compose file (say, from my Sonarr guide)? Just drop the sabnzbd: 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:
#################################
# SABNZBD
#################################
sabnzbd:
# Official LinuxServer.io SABnzbd image
image: lscr.io/linuxserver/sabnzbd:latest
# Friendly name for the container
container_name: sabnzbd
# Pulls PUID, PGID, UMASK, TZ, ports, and paths from the .env file
env_file: .env
ports:
# Maps the host port to SABnzbd's web UI (8080) inside the container
- ${SABNZBD_PORT}:8080
volumes:
# SABnzbd's config (persists across restarts)
- ${CONFIG_PATH}/sabnzbd:/config
# Shared download folder (must be the same path Sonarr and Radarr use)
- ${DOWNLOADS_PATH}:/downloads
healthcheck:
# Lets `docker ps` show "healthy" once the UI starts answering
test: wget --no-verbose --tries=1 --spider http://localhost:8080/ || exit 1
start_period: 30s
timeout: 3s
interval: 30s
retries: 3
networks:
# Joins the shared media network
- 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: Watch the indentation. YAML is picky. Two spaces per level, never 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
# 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
Update the paths to match your setup:
CONFIG_PATH=/dockeris the root folder where Docker stores persistent config.DOWNLOADS_PATH=/downloadsis where your download client writes both incomplete and finished files.
Sonarr, Radarr, and SABnzbd all need to see the same /downloads path inside their containers. SABnzbd writes finished files there, and Sonarr and Radarr copy them into your library on import. As long as all three mount the download drive at the identical /downloads path, the apps find what SABnzbd finished with no remote path mapping.
Also update the timezone (TZ) to match yours. The full list lives here: valid timezones (Wikipedia).
Step 4: Start SABnzbd
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 container online:
docker compose up -d
Check it’s running:
docker ps
You should see sabnzbd in the list:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d152d14e3fe3 lscr.io/linuxserver/sabnzbd:latest "/init" 15 seconds ago Up 11 seconds (healthy) 0.0.0.0:8080->8080/tcp, [::]:8080->8080/tcp sabnzbd
If the container isn’t there, check what happened:
docker compose logs sabnzbd
Step 5: Fix Permissions (If Needed)
Permissions trip up everyone the first time. The PUID/PGID inside the container have to actually own the host directories, or SABnzbd can’t write to them. Fix it like this:
sudo chown -R `yourusername`:media /docker/ && sudo chmod -R 770 /docker/
sudo chown -R `yourusername`:media /media/ && sudo chmod -R 770 /media/
For the full breakdown of why this works, read this: 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 (host, port, username, password, connections)
- Set up download folders
- Create categories like
tvandmoviesso Sonarr and Radarr can route downloads - Grab the API key from
Config > Generalfor Sonarr and Radarr to talk back
Once that’s done, SABnzbd is the download engine for the rest of the 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
SABnzbd comes back up on the latest image with all your config intact.
In Closing
SABnzbd is the workhorse behind Usenet downloads. Pair it with Sonarr and Radarr and you have a media stack that runs itself. Running it in Docker keeps the install clean, makes upgrades a one-liner, and lets you move the whole thing between servers without rebuilding.
If something breaks after this, the two places to look first are container logs (docker compose logs sabnzbd) and host directory permissions on /docker and /media. Nine times out of ten, that’s where the problem is.

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.
