Last updated on 30 November 2023
Please note if you are using DSM7.2 or higher you should use the Container Manager version of this guide from the menu.
This guide has reached the end of its updates as most people are now on the latest DSM update - This guide is correct as of 08/12/2023 however no further updates will be added.
Update | Date |
---|---|
Amended the path to save the compose file – this is for security, so the container has no access to the file contents. | 14/04/2023 |
In this guide I am going to take you through the setup of Plex in Docker using Docker Compose.
As of writing the Synology UI does not have the capability of passing through specific hardware to a container, this means we will need to set up Plex via SSH (terminal). However, don’t freak out as it’s not that difficult!
Plex Pass
You will only benefit from hardware transcoding if you have an active Plex Pass either monthly or lifetime. If you don’t have one you can either follow this guide or jump over to the non hardware transcoding version.
Does my Synology support Hardware Transcoding?
Before we do anything else, you need to make sure your model of Synology has hardware transcoding capabilities. You need to do a quick lookup via the linked Google Sheet below, this is updated by Plex and makes it super easy to look up your model of NAS.
If you find that hardware transcoding is not available on your model you can jump back over to the standard guide here
Let’s Begin
As usual, it’s important you complete the two proceeding guides which will get your folder structure and docker, user setup.
Docker Compose
We will be using Docker Compose to set up the Plex container. In a nutshell we will be creating a text file (YAML formatted) which tells Docker exactly how we want to set up a specific container.
The next steps can be done either using a code/text editor such as Notepad++ or to keep things simple for this guide we will be using the Synology Text Editor which can be installed from the Package Center.

Open up Text Editor and click on File then New to start a new file.

You can now copy and paste the details below into the new text file, it is important you don’t change the spacing as YAML has to be formatted correctly in order to be read by Docker Compose.
services:
plex:
image: linuxserver/plex
container_name: plex
network_mode: host
environment:
- PUID=1234 #CHANGE_TO_YOUR_UID
- PGID=65432 #CHANGE_TO_YOUR_GID
- TZ=Europe/London #CHANGE_TO_YOUR_TZ
- VERSION=latest
- PLEX_CLAIM=
volumes:
- /volume1/docker/plex:/config
- /volume1/data/media:/data/media
devices:
- /dev/dri:/dev/dri
restart: unless-stopped
A note on Network Mode
You will notice that for Plex we don’t put it on the normal bridge network, this is because DSM reserves the DLNA ports Plex requires in order to use DLNA. So we run in Host mode, so it can share the ports.
Environment Variables
We need to make some changes in order for the container to have the correct permissions to save its configuration files and to have access to your media.
Please note the PLEX_CLAIM variable is optional and not always required. You can remove this line if you don’t need it or come back and add it if you are unable to sign in to your server on start up.
To get the code go to https://plex.tv/claim and sign in, then put the code you receive after the ‘PLEX_CLAIM=’. You have 4 mins to finish the guide after doing this, so best to grab it just before running the compose file in a few steps time.
PUID and PGID
When you created your docker user you would have noted down these IDs add these to the compose file in the ‘environment:’ section
Volumes
We can now pass through our file paths into the container they are mounted using the volume’s section of the compose file.
I have pre-filled this section to pass the correct paths, the only thing that you may need to change is the /volume1/ if your file paths are on a different volume.
Timezone
The timezone variable will tell the container where you are in the world meaning your logs and scheduled tasks will run at the correct times. A list of timezones with the correct formatting can be found here wikipedia.org/wiki/List_of_tz_database_time_zones
Your final file should look similar to the one shown below.

Saving the Compose File
We now need to save this file into our docker share.
Click on File then Save As, navigate to the ‘Docker’ share and create a new folder called ‘plex’ (lower case)

You need to change the ‘File name’ to plex.yml and save it in the ‘docker‘ folder

SSH and Docker-Compose
It’s time to get logged into your Diskstation via SSH, you can do this in the same way as when you obtained your IDs in the ‘Setting up a restricted Docker user‘ guide.

Once you have logged in you will need to give 2 commands, you can copy and paste these one at a time — you will need to enter your password for the command starting with ‘sudo’
First we are going to change directory to where the plex.yml is located, type the below and then press enter.
cd /volume1/docker
Then we are going to instruct Docker Compose to read the file we created and complete the set-up of the container. Again type the below and press enter.
sudo docker-compose -f plex.yml up -d
When the command has completed you should be able to see Plex running in the list of containers in the Synology GUI.

Plex Initial Setup
After a few minutes you should be able to access the server and go through the Plex setup by going to the IP of your NAS in your browser followed by port 32400/web/
e.g 192.168.0.45:32400/web/
You will be asked to sign in or sign up for an account if you don’t have one already.

You should now be able to add your media which will be in the /data/media folder within Plex

Once you have got to the main Plex interface make sure you go into the settings and turn on
- Enable HDR tone mapping
- Use hardware acceleration when available

That’s it you are all setup. When a new server update is available you will just need to restart the container, and it will automatically download the latest update.
Historic Updates | Date |
---|---|
New guide released | 06/12/2021 |
Added note around Ryzen based Synology models | 27/12/2021 |
Updated Environment Variables to ensure server is updating to the latest version | 02/02/2022 |
Added Timezone Variable to the compose file | 22/05/2022 |
Amended the mount path for media | 12/08/2022 |
Amended the Plex image to pull from dockerhub to make updates easier | 18/08/2022 |
Updated the Hardware Transcode section it’s now much easier | 02/09/2022 |
Added the Optional Plex Claim to the Environment Variables | 18/02/2023 |
Compose version number removed and small wording amendments | 09/04/2023 |
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.
Why did you use “network_mode: host” for Plex and not “network_mode: synobridge”?
Plex recommend putting it on the host simple as that really – you can add to a bridge but will have to manually port map everything – also one of the ports is in use by another Synology service, so it tends to complain!
Ah ok thanks. I had already used your method and it works perfectly, I was just wondering why you had used a different network mode for Plex compared to your other tutorials.
Great work on all the tutorials!
Hardware transcoding does not work on HDR files with HDR Tonemapping enabled. I’m not sure if this is a Plex issue or a Docker issue. As soon a Tonemapping is disabled, hardware transcoding of HDR files works flawlessly, but the colors may be a bit off.
What model NAS are you using? Tone Mapping should be working correctly which would suggest something is bugged/broken
I was not able to connect to Plex until I deleted, added the below to the yaml, and recreated it.
PLEX_CLAIM=claim-####…
OK I will get this added as for some it is needed others it’s not.
Plex UI shows says there is a network error. Could this be related to what James above stated? If so, what is the claim # or what does it do? And is that entire line of code necessary?
A network error would suggest something else is happening as the claim step is only required if the server doesn’t give you the option to just sign into it.
Where is the network error appearing?
I get this inside of Plex when I to the the local URL. [The server “Host” is unreachable. Make sure it’s running, double check your network, and try again.] I originally had my set up without Docker. So I am wondering if there is an artifact left over or something. Also I noticed the only folder in FileStation that is under the plex folder is Library. No config folder etc… So I am going to redo it all this morning.
James, did you place the claim number after the = or did you actually type in claim-(the claim number) after the = ?
I have edited the guide above to show how it’s formatted you put the number after the =
[…] of https://drfrankenstein.co.uk/2021/12/06/plex-in-docker-on-a-synology-nas-hardware-transcoding/ ***My settings for my personal plex server have been […]
Hi, Dr. Frankenstein, and thank you so much for your guides!
I only have one problem after following your guides. I am sorry if the question is verry basic, but I am all new to this.
When I download through Prowlarr and qbittorrent, my downloaded files stays in /data/torrents/, and does not get “sent” to /data/media so Plex can find them. I have tried to find the problem, but i cant find out were i went wrong.
As i understand, my downloaded files should automatically get sorted (depending on if it is a movie or a tv show) from /data/torrents/completed to /data/media/movies or …/tv?
Hey Henrik
You mention Prowlarr – have you got Sonarr and Radarr in place as they do the actual media management.
Hi, and thank you for answering so quick!
Yes, I have installed sonarr and radarr, and configured the “media management root folder” to /data/media/movies(/tv). qbittorrent are working with sonarr and radarr, but i cant get the completed files from /data/torrents/completed/ to be transfered to the /data/media/movies(/tv) even tough I have chosen the root folder to /data/media/movies(/tv) in both radarr and sonarr
Any idea why?
Thank you so mush for your help!