docker.recipes

Complete *arr Media Automation

intermediate

Full media automation with Sonarr, Radarr, Prowlarr, and download clients.

Overview

Sonarr, Radarr, and Prowlarr form the core of modern media automation, representing the evolution of self-hosted media management that began with early tools like SickBeard and CouchPotato. Sonarr handles TV show monitoring and acquisition, automatically tracking new episodes across RSS feeds and integrating with both Usenet and BitTorrent sources. Radarr provides identical functionality for movies, while Prowlarr serves as the centralized indexer manager that synchronizes tracker and indexer configurations across all *arr applications. This stack represents years of community-driven development focused on reliability, extensive customization options, and robust metadata handling. Prowlarr eliminates the traditional pain point of manually configuring indexers in each application, instead providing a single management interface that pushes configurations to connected services. When combined with qBittorrent as the download client and Jellyfin as the media server, this creates a complete pipeline from content discovery to streaming. The integration allows for automatic quality upgrades, failed download handling, and intelligent file organization that maintains clean library structures. This particular combination offers privacy-focused alternatives to commercial services - Jellyfin provides tracking-free streaming while qBittorrent offers advanced bandwidth management and RSS automation features. Home media enthusiasts and privacy-conscious users benefit most from this stack, particularly those managing large libraries across multiple content types. The system excels in environments where content needs to be automatically acquired, organized, and made available across multiple devices without relying on external services or subscriptions.

Key Features

  • Centralized indexer management through Prowlarr with automatic sync to all connected *arr applications
  • Automatic TV episode and movie monitoring with customizable quality profiles and upgrade paths
  • Failed download handling and automatic re-searching when downloads fail or are of poor quality
  • Calendar view integration showing upcoming releases and monitoring status across all content types
  • Hardware-accelerated transcoding in Jellyfin with support for Intel QuickSync, NVIDIA NVENC, and AMD VCE
  • Advanced torrent management in qBittorrent with RSS automation, sequential downloading, and bandwidth scheduling
  • Comprehensive metadata fetching from TheTVDB, TheMovieDB, and MusicBrainz with automatic artwork and subtitle handling
  • List integration supporting IMDb watchlists, Trakt lists, and custom import sources for bulk content addition

Common Use Cases

  • 1Home media server operators wanting to automate TV show and movie acquisition from multiple sources
  • 2Cord-cutters seeking to replace cable television with automated content delivery and streaming
  • 3Media collectors managing large libraries requiring consistent naming, organization, and quality standards
  • 4Privacy-focused users avoiding commercial streaming services while maintaining equivalent convenience
  • 5Multi-user households needing centralized media management with individual user profiles and parental controls
  • 6Remote media access scenarios where content needs to be automatically acquired and available for streaming anywhere
  • 7Bandwidth-conscious environments requiring scheduled downloads and quality management to control data usage

Prerequisites

  • Minimum 2GB RAM total (512MB each for Sonarr/Radarr, 256MB for Prowlarr, 1GB+ for Jellyfin with transcoding)
  • At least 20GB free storage for application data plus adequate space for media libraries and download staging
  • Valid indexer accounts for Usenet providers or private torrent trackers to populate Prowlarr configurations
  • Basic understanding of media file formats, quality profiles, and torrent/Usenet concepts
  • Network configuration knowledge for port forwarding if accessing services remotely or optimizing torrent connectivity
  • Familiarity with file permissions and user/group management for proper media file access across containers

For development & testing. Review security settings, change default credentials, and test thoroughly before production use. See Terms

docker-compose.yml

docker-compose.yml
1services:
2 prowlarr:
3 image: linuxserver/prowlarr:latest
4 environment:
5 - PUID=1000
6 - PGID=1000
7 - TZ=UTC
8 volumes:
9 - prowlarr_config:/config
10 ports:
11 - "9696:9696"
12 networks:
13 - arr_net
14
15 sonarr:
16 image: linuxserver/sonarr:latest
17 environment:
18 - PUID=1000
19 - PGID=1000
20 - TZ=UTC
21 volumes:
22 - sonarr_config:/config
23 - /media/tv:/tv
24 - /media/downloads:/downloads
25 ports:
26 - "8989:8989"
27 networks:
28 - arr_net
29
30 radarr:
31 image: linuxserver/radarr:latest
32 environment:
33 - PUID=1000
34 - PGID=1000
35 - TZ=UTC
36 volumes:
37 - radarr_config:/config
38 - /media/movies:/movies
39 - /media/downloads:/downloads
40 ports:
41 - "7878:7878"
42 networks:
43 - arr_net
44
45 lidarr:
46 image: linuxserver/lidarr:latest
47 environment:
48 - PUID=1000
49 - PGID=1000
50 - TZ=UTC
51 volumes:
52 - lidarr_config:/config
53 - /media/music:/music
54 - /media/downloads:/downloads
55 ports:
56 - "8686:8686"
57 networks:
58 - arr_net
59
60 readarr:
61 image: linuxserver/readarr:develop
62 environment:
63 - PUID=1000
64 - PGID=1000
65 - TZ=UTC
66 volumes:
67 - readarr_config:/config
68 - /media/books:/books
69 - /media/downloads:/downloads
70 ports:
71 - "8787:8787"
72 networks:
73 - arr_net
74
75 qbittorrent:
76 image: linuxserver/qbittorrent:latest
77 environment:
78 - PUID=1000
79 - PGID=1000
80 - TZ=UTC
81 - WEBUI_PORT=8081
82 volumes:
83 - qbit_config:/config
84 - /media/downloads:/downloads
85 ports:
86 - "8081:8081"
87 - "6881:6881"
88 - "6881:6881/udp"
89 networks:
90 - arr_net
91
92 jellyfin:
93 image: jellyfin/jellyfin:latest
94 environment:
95 - PUID=1000
96 - PGID=1000
97 - TZ=UTC
98 volumes:
99 - jellyfin_config:/config
100 - jellyfin_cache:/cache
101 - /media/tv:/media/tv:ro
102 - /media/movies:/media/movies:ro
103 - /media/music:/media/music:ro
104 ports:
105 - "8096:8096"
106 networks:
107 - arr_net
108
109volumes:
110 prowlarr_config:
111 sonarr_config:
112 radarr_config:
113 lidarr_config:
114 readarr_config:
115 qbit_config:
116 jellyfin_config:
117 jellyfin_cache:
118
119networks:
120 arr_net:

.env Template

.env
1# *arr Media Stack
2# Update /media paths to your media directories
3
4# Prowlarr at http://localhost:9696
5# Sonarr at http://localhost:8989
6# Radarr at http://localhost:7878
7# Lidarr at http://localhost:8686
8# Readarr at http://localhost:8787
9# qBittorrent at http://localhost:8081
10# Jellyfin at http://localhost:8096

Usage Notes

  1. 1Configure Prowlarr first as indexer manager
  2. 2Connect *arr apps to Prowlarr
  3. 3qBittorrent for downloads
  4. 4Jellyfin for streaming
  5. 5Set correct media paths

Individual Services(7 services)

Copy individual services to mix and match with your existing compose files.

prowlarr
prowlarr:
  image: linuxserver/prowlarr:latest
  environment:
    - PUID=1000
    - PGID=1000
    - TZ=UTC
  volumes:
    - prowlarr_config:/config
  ports:
    - "9696:9696"
  networks:
    - arr_net
sonarr
sonarr:
  image: linuxserver/sonarr:latest
  environment:
    - PUID=1000
    - PGID=1000
    - TZ=UTC
  volumes:
    - sonarr_config:/config
    - /media/tv:/tv
    - /media/downloads:/downloads
  ports:
    - "8989:8989"
  networks:
    - arr_net
radarr
radarr:
  image: linuxserver/radarr:latest
  environment:
    - PUID=1000
    - PGID=1000
    - TZ=UTC
  volumes:
    - radarr_config:/config
    - /media/movies:/movies
    - /media/downloads:/downloads
  ports:
    - "7878:7878"
  networks:
    - arr_net
lidarr
lidarr:
  image: linuxserver/lidarr:latest
  environment:
    - PUID=1000
    - PGID=1000
    - TZ=UTC
  volumes:
    - lidarr_config:/config
    - /media/music:/music
    - /media/downloads:/downloads
  ports:
    - "8686:8686"
  networks:
    - arr_net
readarr
readarr:
  image: linuxserver/readarr:develop
  environment:
    - PUID=1000
    - PGID=1000
    - TZ=UTC
  volumes:
    - readarr_config:/config
    - /media/books:/books
    - /media/downloads:/downloads
  ports:
    - "8787:8787"
  networks:
    - arr_net
qbittorrent
qbittorrent:
  image: linuxserver/qbittorrent:latest
  environment:
    - PUID=1000
    - PGID=1000
    - TZ=UTC
    - WEBUI_PORT=8081
  volumes:
    - qbit_config:/config
    - /media/downloads:/downloads
  ports:
    - "8081:8081"
    - "6881:6881"
    - 6881:6881/udp
  networks:
    - arr_net
jellyfin
jellyfin:
  image: jellyfin/jellyfin:latest
  environment:
    - PUID=1000
    - PGID=1000
    - TZ=UTC
  volumes:
    - jellyfin_config:/config
    - jellyfin_cache:/cache
    - /media/tv:/media/tv:ro
    - /media/movies:/media/movies:ro
    - /media/music:/media/music:ro
  ports:
    - "8096:8096"
  networks:
    - arr_net

Quick Start

terminal
1# 1. Create the compose file
2cat > docker-compose.yml << 'EOF'
3services:
4 prowlarr:
5 image: linuxserver/prowlarr:latest
6 environment:
7 - PUID=1000
8 - PGID=1000
9 - TZ=UTC
10 volumes:
11 - prowlarr_config:/config
12 ports:
13 - "9696:9696"
14 networks:
15 - arr_net
16
17 sonarr:
18 image: linuxserver/sonarr:latest
19 environment:
20 - PUID=1000
21 - PGID=1000
22 - TZ=UTC
23 volumes:
24 - sonarr_config:/config
25 - /media/tv:/tv
26 - /media/downloads:/downloads
27 ports:
28 - "8989:8989"
29 networks:
30 - arr_net
31
32 radarr:
33 image: linuxserver/radarr:latest
34 environment:
35 - PUID=1000
36 - PGID=1000
37 - TZ=UTC
38 volumes:
39 - radarr_config:/config
40 - /media/movies:/movies
41 - /media/downloads:/downloads
42 ports:
43 - "7878:7878"
44 networks:
45 - arr_net
46
47 lidarr:
48 image: linuxserver/lidarr:latest
49 environment:
50 - PUID=1000
51 - PGID=1000
52 - TZ=UTC
53 volumes:
54 - lidarr_config:/config
55 - /media/music:/music
56 - /media/downloads:/downloads
57 ports:
58 - "8686:8686"
59 networks:
60 - arr_net
61
62 readarr:
63 image: linuxserver/readarr:develop
64 environment:
65 - PUID=1000
66 - PGID=1000
67 - TZ=UTC
68 volumes:
69 - readarr_config:/config
70 - /media/books:/books
71 - /media/downloads:/downloads
72 ports:
73 - "8787:8787"
74 networks:
75 - arr_net
76
77 qbittorrent:
78 image: linuxserver/qbittorrent:latest
79 environment:
80 - PUID=1000
81 - PGID=1000
82 - TZ=UTC
83 - WEBUI_PORT=8081
84 volumes:
85 - qbit_config:/config
86 - /media/downloads:/downloads
87 ports:
88 - "8081:8081"
89 - "6881:6881"
90 - "6881:6881/udp"
91 networks:
92 - arr_net
93
94 jellyfin:
95 image: jellyfin/jellyfin:latest
96 environment:
97 - PUID=1000
98 - PGID=1000
99 - TZ=UTC
100 volumes:
101 - jellyfin_config:/config
102 - jellyfin_cache:/cache
103 - /media/tv:/media/tv:ro
104 - /media/movies:/media/movies:ro
105 - /media/music:/media/music:ro
106 ports:
107 - "8096:8096"
108 networks:
109 - arr_net
110
111volumes:
112 prowlarr_config:
113 sonarr_config:
114 radarr_config:
115 lidarr_config:
116 readarr_config:
117 qbit_config:
118 jellyfin_config:
119 jellyfin_cache:
120
121networks:
122 arr_net:
123EOF
124
125# 2. Create the .env file
126cat > .env << 'EOF'
127# *arr Media Stack
128# Update /media paths to your media directories
129
130# Prowlarr at http://localhost:9696
131# Sonarr at http://localhost:8989
132# Radarr at http://localhost:7878
133# Lidarr at http://localhost:8686
134# Readarr at http://localhost:8787
135# qBittorrent at http://localhost:8081
136# Jellyfin at http://localhost:8096
137EOF
138
139# 3. Start the services
140docker compose up -d
141
142# 4. View logs
143docker compose logs -f

One-Liner

Run this command to download and set up the recipe in one step:

terminal
1curl -fsSL https://docker.recipes/api/recipes/arr-media-stack/run | bash

Troubleshooting

  • Sonarr shows 'No indexers available' error: Configure indexers in Prowlarr first, then sync applications in Settings > Apps
  • Downloads stuck in qBittorrent but not importing: Check that download and media paths match between services, ensure proper file permissions
  • Jellyfin transcoding fails or shows codec errors: Verify hardware acceleration settings and ensure GPU drivers are properly passed to container
  • Prowlarr indexer tests failing with authentication errors: Verify API keys and credentials, check if indexer requires specific user-agent strings
  • Media files not appearing in Jellyfin after import: Trigger library scan manually, verify read permissions on media directories, check file naming conventions
  • High CPU usage during peak hours: Implement download scheduling in qBittorrent, limit concurrent downloads, configure transcoding quality limits in Jellyfin

Community Notes

Loading...
Loading notes...

Download Recipe Kit

Get all files in a ready-to-deploy package

Includes docker-compose.yml, .env template, README, and license

Ad Space