DiyMediaServer
Featured image of post Radarr Docker Compose Setup Guide (2026)

Radarr Docker Compose Setup Guide (2026)

Radarr Docker Compose setup — port 7878, working compose file, volume mapping, and connecting to Prowlarr and SABnzbd for automated movie downloads.

💡
Tip: Default port: Radarr runs on port 7878. Access the web UI at http://your-server-ip:7878 once the container is running.

If you love watching movies, you know the drill. Keeping a library organized and current feels like a second job. Release dates slip, quality options multiply, and sources scatter across the internet. Pretty soon your “movie collection” is a folder full of mystery files.

That’s where Radarr comes in. Instead of rummaging through torrent or Usenet sites for a new release, or trying to remember when something drops digitally, Radarr handles it. It watches your wanted list, grabs releases through your torrent or Usenet client, then renames, organizes, and files the result into your media library. Ready to watch on Jellyfin, Plex, or Kodi.

Set it and forget it. That’s the whole pitch.

Why Radarr Is a Must-Have

Here’s why Radarr is my go-to for movie automation:

  • Automated downloads. Add a movie. Radarr searches for it, grabs it, and upgrades to a better release when one shows up.
  • Missing movie search. Radarr keeps scanning for anything missing or unavailable when you first added it.
  • Download client integration. Works with qBittorrent, Deluge, SABnzbd, and NZBGet.
  • Library management. Clean folder structures, proper naming, full metadata.

Radarr turns your movie library into a system that runs itself.

Why Run Radarr in Docker?

Docker is one of the best ways to run it. Here’s why:

  • Clean isolation. Radarr and its dependencies stay separate from your host system.
  • Effortless updates. Pull the latest image. Done.
  • Portability. Move your setup to another machine without rebuilding from scratch.
  • No dependency hell. No conflicting libraries fighting with your other software.

Running Radarr in Docker keeps things tidy, predictable, and easy to troubleshoot when something breaks. And something always breaks eventually.

If you’re ready to take control of your movie collection, this is the way.

Step 1: Install Docker

You’ll need Docker installed on your server first. Walk through this guide if you haven’t already: Master the Basics - How to Install Docker

Step 2: Create or Modify Your Docker Compose File

Let’s define your Radarr container in docker-compose.yml. I’m adding Radarr to the existing docker-compose.yml from my 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 paste in 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 
      - ${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}
      - UMASK=0007
      - 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}
      - UMASK=0007
      - 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: Watch your spacing. YAML is picky. Two spaces per indent, no tabs. Mix them and the container won’t start.

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
# 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

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

Update the Radarr paths to match your setup. Here’s what each one does:

  • CONFIG_PATH=/docker is the root folder where Docker stores persistent container files.
  • MEDIA_PATH=/media is the root folder for your media files.
  • DOWNLOADS_PATH=/media/downloads is where your download client drops temp and incomplete files.

Make sure your download client container shares access to the /downloads path. If it doesn’t, Radarr can’t move finished downloads into your library and you’ll spend an afternoon wondering why.

Also update TZ to your timezone. Reference: this list of valid timezones.

Step 4: Start Radarr

Bring your new Radarr container online:

docker compose up -d

Check that it’s running:

docker ps

You should see radarr 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

Step 5: Fix Permissions (If Needed)

Permission problems are the classic gotcha with media containers. Here’s how to make everything play nice:

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

Want the longer explanation of what’s going on here? Read this: Master the Basics - Linux Permissions

Step 6: Access Radarr

Open your browser and hit:

http://your-server-ip:7878

From there you can add movies, set quality profiles, and connect your download clients.

For deeper configuration, the official Radarr Wiki is the definitive source.

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 and Sonarr come back up on the latest version. No reconfig needed.

Conclusion

Radarr does the boring work. It tracks, downloads, upgrades, and organizes your movies without you babysitting it. No more hunting for files, renaming releases, or shuffling folders around by hand.

Running it in Docker keeps your host system clean and your container easy to manage. Pair Radarr with Sonarr for TV shows and Lidarr for music, and you’re running a self-updating media library that mostly takes care of itself.

Was this useful?

Last updated on May 20, 2026 06:56 MDT