Important or Recent Updates
Historic Updates | Date |
---|---|
New guide | 13/09/2023 |
Added additional security option to the compose to restrict the container from gaining new privileges as well as umask variable | 25/10/2023 |
Adjusted the restart variable to make sure containers start on boot | 28/10/2023 |
This guide is going to eventually replace the existing separate guides for all the apps in the title. By combining these into a single project it saves you time and effort in the initial set up and makes updates more seamless.
You can add and remove the containers from this project based on your preferences.
Let’s Begin
In order for you to successfully use this guide please complete the three initial setup guides if you have not done so already
- Docker Package, SSD and Memory Recommendations
- Step 1: Directory Setup Guide
- Step 2: Setting up a restricted Docker user
- Step 3: Setting up a Docker Bridge Network (synobridge)
As Container Manager now supports using Docker Compose in the UI we will be using it as it will save you lots of time and steps!
What on earth is a Docker Compose? Docker Compose allows us to define how Docker should set up one or more containers within a single configuration file. This file is yaml formatted and Container Manager uses the Projects feature to manage them.
Folder Setup
First we need to set up some folders for the Arr’s to save their configuration files and also where the Project will save the compose.
Using File Station create the following folders. (Skip ones you don’t need)
/docker/projects/arrs-compose - Required
/docker/radarr
/docker/sonarr
/docker/lidarr
/docker/prowlarr
/docker/bazarr
/docker/readarr

Container Set Up
Next we are going to set up a ‘Project’ in Container Manager. Open up Container Manager and click on Project, then on the right-hand side click ‘Create’.

In the next screen we will set up our General Settings.
Section | Setting |
---|---|
Project Name: | media-project |
Path: | /docker/projects/arrs-compose |
Source: | Create docker-compose.yml |

Next we are going to drop in our docker compose configuration, copy all the code in the box below and paste it into line ‘1’

A couple of notes:
- I personally use the Linuxserver images, so they are used below
- I am pulling these images directly from Docker Hub and not lscr.io this is because container manager can’t check for updates on third party sites
- You will see notes saying #change me we will do this on the next step, and you can remove the comments if you wish
services:
sonarr:
image: linuxserver/sonarr:latest
container_name: sonarr
environment:
- PUID=1234 #CHANGE_TO_YOUR_UID
- PGID=65432 #CHANGE_TO_YOUR_GID
- TZ=Europe/London #CHANGE_TO_YOUR_TZ
- UMASK=022
volumes:
- /volume1/docker/sonarr:/config
- /volume1/data:/data
ports:
- 8989:8989/tcp
network_mode: synobridge
security_opt:
- no-new-privileges:true
restart: always
lidarr:
image: linuxserver/lidarr:latest
container_name: lidarr
environment:
- PUID=1234 #CHANGE_TO_YOUR_UID
- PGID=65432 #CHANGE_TO_YOUR_GID
- TZ=Europe/London #CHANGE_TO_YOUR_TZ
- UMASK=022
volumes:
- /volume1/docker/lidarr:/config
- /volume1/data:/data
ports:
- 8686:8686/tcp
network_mode: synobridge
security_opt:
- no-new-privileges:true
restart: always
radarr:
image: linuxserver/radarr:latest
container_name: radarr
environment:
- PUID=1234 #CHANGE_TO_YOUR_UID
- PGID=65432 #CHANGE_TO_YOUR_GID
- TZ=Europe/London #CHANGE_TO_YOUR_TZ
- UMASK=022
volumes:
- /volume1/docker/radarr:/config
- /volume1/data:/data
ports:
- 7878:7878/tcp
network_mode: synobridge
security_opt:
- no-new-privileges:true
restart: always
readarr:
image: linuxserver/readarr:develop
container_name: readarr
environment:
- PUID=1234 #CHANGE_TO_YOUR_UID
- PGID=65432 #CHANGE_TO_YOUR_GID
- TZ=Europe/London #CHANGE_TO_YOUR_TZ
- UMASK=022
volumes:
- /volume1/docker/readarr:/config
- /volume1/data/:/data
ports:
- 8787:8787/tcp
network_mode: synobridge
security_opt:
- no-new-privileges:true
restart: always
bazarr:
image: linuxserver/bazarr:latest
container_name: bazarr
environment:
- PUID=1234 #CHANGE_TO_YOUR_UID
- PGID=65432 #CHANGE_TO_YOUR_GID
- TZ=Europe/London #CHANGE_TO_YOUR_TZ
- UMASK=022
volumes:
- /volume1/docker/bazarr:/config
- /volume1/data/:/data
ports:
- 6767:6767/tcp
network_mode: synobridge
security_opt:
- no-new-privileges:true
restart: always
I have split out Prowlarr as you may want this running on a VPN connection if your ISP blocks certain indexers. If not copy this section into your compose as well. See the side menu for adding this to GlueTUN.
prowlarr:
image: linuxserver/prowlarr:latest
container_name: prowlarr
environment:
- PUID=1234 #CHANGE_TO_YOUR_UID
- PGID=65432 #CHANGE_TO_YOUR_GID
- TZ=Europe/London #CHANGE_TO_YOUR_TZ
- UMASK=022
volumes:
- /volume1/docker/prowlarr:/config
ports:
- 9696:9696/tcp
network_mode: synobridge
security_opt:
- no-new-privileges:true
restart: always
Editing the Compose & Environment Variables
Please keep in mind that YAML formatting is very specific, so keep things lined up as per the original.
The compose contains all the Arr’s in the overall stack, you can remove any you don’t plan on using by deleting their entire section in the code.
We need to make some minor edits to the compose file in order to make sure the containers use the ‘dockerlimited’ user we created earlier and also let them know which timezone we are located. You will need to edit these in each section noted with ‘#change me’
Variable | Value |
---|---|
PUID= | Change it to the UID you obtained earlier in the first setup guides |
PGID= | Change it to the GID you obtained earlier in the first setup guides |
TZ= | You will need to change this line to your own timezone code – you can find the correct list of ones to use on wikipedia.org/wiki/List_of_tz_database_time_zones |
Once you have made all your required edits click ‘Next’
Nothing to change on the next screen click ‘Next’ again..

On the final screen just click ‘Done’ and you will see a new window appear which will kick of downloading of the required container image and configure the containers.

This can take a couple of minutes to finish as all the images are downloaded and extracted. You should see ‘Code 0’ when it has finished.

Once finished you will see the Project is running with a green status.

Firewall Exceptions
(Skip if you don’t have the Firewall configured)
If you have the Synology Firewall enabled please see this additional guide for further info on exceptions and correct set up.
Containers are ready to use
You will now be able to access each of the containers on their respective ports.
App | Address (not https://) |
---|---|
Lidarr | http://NASIP:8686 |
Radarr | http://NASIP:7878 |
Sonarr | http://NASIP:8989 |
Readarr | http://NASIP:8787 |
Bazarr | http://NASIP:6767 |
Prowlarr | http://NASIP:9696 |
Please see the next section which covers the ‘basics’ of each application setup as these usually catch people out. Full documentation can be found on https://wiki.servarr.com/
Key Settings within the Arrs
Settings > Media Management > Root Folders
Each of the Arr’s refer to the place(s) you keep your media as ‘Root Folders’. These are where the app will ultimately move your music/movies/books/shows once they finish downloading. Use the table below to set each of your folders correctly.
You will see other folders when you first browse for the /data folder it is located in the top level folder.

App | Root Folder |
---|---|
Lidarr | /data/media/music |
Radarr | /data/media/movies |
Sonarr | /data/media/tv |
Readarr | /data/media/books |
Bazarr | Not required |
Prowlarr | Not required |
Settings > Media Management > Remote Path Mappings
While most of the settings on this page are self-explanatory something that has caught people out is the Remote Path Mappings setting. If you are hosting all your services on the same NAS and in Docker do not add any settings here.
Settings > Download Client(s) > Add your Client > Host and Port
As our containers are all running on the ‘synobridge’ custom bridge we can use the Gateway IP for this bridge for inter container networking. This will be 172.20.0.1 and the appropriate port for your Client assuming it is running in Docker!
You should now have the basics in place and I 100% recommend having a look at the previously mentioned https://wiki.servarr.com/ documentation as it will help you understand how the Arrs work.
Other settings for the Arrs
While I covered some very basics you really need to make use of the documentation, it goes into detail of how and why the core functions work across the apps. You can find it on the Servarr Wiki.
FAQ
Migration from old guides.
If you followed my older guides where you set up each of these containers in the Container Manager UI or Pre DSM7.2 Docker UI you can follow this one to migrate in a couple of steps.
- Stop and delete the existing containers but keep your directories!
- Follow the rest of this guide and all your existing configs will be kept using your old files.
Looking for some help, join our Discord community
If you are struggling with any steps in the guides or looking to branch out into other containers join our Discord community!
Buy me a beverage!
If you have found my site useful please consider pinging me a tip as it helps cover the cost of running things or just lets me stay hydrated. Plus 10% goes to the devs of the apps I do guides for every year.
Sorry if this is a dumb question but with this set up, is the content downloaded from the indexer stored in the torrent completed folder and the designated media folder. I see a lot of my content in both so does that mean storage used essentially double?
Hi Jaimie
While the torrent is seeding you will see the media in both the Completed and Media folders, however they are hard linked in this setup, so they are only actually taking up the single files space. When the torrent moves from Seeding to Completed (Based on your seeding preferences in your torrent client) The appropriate Arr removes the torrent from the client and severs the hard link on the Completed folder. Essentially it looks like two sets of files but in reality its one.
Hi,
First of all, thank to you for all you did !
I got a problem i got radarr whith synology’s package. and Radarr can not acces to the folder where my downloads at.
But i cant’t even find them ..
i did that for the folder : /volume1/downloads /torrents, and the downloads are in the previous folder..
Hi Alex – I have not used the Radarr package, are you mixing that with Docker? Or is this all Docker?
Am mixing that with docker, it’s seems to be a permission issue, but i can’t even find the real folder.
Hey I think I spotted you on Discord will reply there 🙂
Hey Doc. I need your help again. Since a couple of days I can’t start the Readarr container anymore, it keeps giving the message that port 8787 has already been allocated.
I’ve had similar issues in the past (also with other containers/ports), but I could always work around it by deleting the image + the container and then restarting the container manager. For some reason this workaround is no longer working.
I’ve tried using ‘sudo lsof -i :8787’ via SSH and then killing all the conflicting processes. But then when I restart the container I’m still getting the same error message.
The only way to ‘fix’ the problem is by removing the docker port from the YAML (‘- 8787 #:8787/tcp’). But then of course readarr gets a random port allocated, that also continually changes (resulting in me always having to first retrieve the used port via SSH, before being able to open readarr, which obviously is quite anoying).
So my question is simple: what is causing the port conflict and how do I fix it?
THANKS!
Hi – This is happening a lot more frequently with Container Manager, we have seen this with various containers in our support forums and no matter what we tried the system refused to believe the port was not actually being used.
You can try to prune the Docker system. Keep in mind this command via SSH will remove any stopped containers (it’s OK for stuff in projects as you can ‘build’ them again) it will clean out any dangling images, networks, and containers.
sudo docker system prune
Thanks again for your help. Unfortunately the prune command didn’t fix the problem either. I ran out of options and ended up manually changing the readarr port from 8787 to 8585.
N.B. After you’ve done this in the YAML, don’t forget to manually change the port in the config.xml, before buidling the project. Otherwise it won’t work (the container will run just fine, but it won’t be reachable over the new port).
It’s a really weird issue – it has got to be a bug. I bet the port will free itself up at some point!
Is there any chance you can add whisparr?
Hey – I have considered doing this but looking at GitHub it seems like there is no development going on. It should follow a similar setup as the other Arrs though. You can use the HotIO version with the docker user and synobridge..
https://hotio.dev/containers/whisparr/#__tabbed_1_2
Thanks for all the guides they’ve been very helpful.
In radarr i have set the host to 172.20.0.1 but I am getting an error “unable to connect to qbittorrent”. I have tried my ip for the nas as the host but cant seem to get it working. the url base and login info is correct for qbit so I am a bit lost.
Thanks
Hey – Are Radarr and Sonarr on the same ‘synobridge’ and GlueTUN?
if they’re not, what would be the correct config?
I have my GlueTUN with prowlarr and flaresolverr under the same ‘synobridge’ in ‘vpn-project’ but bazarr, radarr, and sonarr under the same ‘synobridge’ in ‘media-project’, and am running into the same problem as slipperysloth. should they all be under the same ‘synobridge’, meaning in my case, move bazarr, radarr, and sonarr into ‘vpn-project’ and in the same GlueTUN YAML config?
This sounds correct. My personal setup is the same with independent compose (projects) on the same bridge: I have found that sometimes there is some oddness with the bridge and a reboot of the NAS or Stopping and Starting the whole Container Manager package flushes out this issue.
I tried adding sonarr and radarr to the same ‘vpn-project’ like ATP suggested and restarted the NAS but I am still running into the same issue. They should all be under the same synobridge and GlueTUN. The host and port for the download client are set to nas ip and 8090, port for Qbit.
Is there a separate firewall exception that needs to be made for radarr to access Qbit? I currently only have the 1194, 1195 ports.
Don’t add Sonarr Radarr etc to the VPN they recommend not running via a VPN connection, If you are running the firewall you need to add exceptions for everything that needs access to the network, every port that each container uses etc. Disable the Firewall and see if the connection works – you will need to then add exceptions for each container accordingly.
If you are not exposing anything directly to the internet I wouldn’t even set the firewall up. (e.g. port forwarding from outside in)