Cannot install Roon on Synology via Docker due to Bad URL (ref#5RYFVV)

Hi! What’s not quite right with Roon?

· None of the above quite fits

None of the above quite fits

· None of these quite match

Tell us what's going on

· Synology still supports (but does not feature update) DSM 7.1.1. ‘Method 2’ in the ‘Installing RoonServer on Synology with Docker’ sheet addresses Synology DSM 7.1 or older using the legacy Docker app. I installed the legacy Docker app on my DS1515+ without issues. The url shown to retrieve the image in ‘Method 2’ on the Docker install sheet returns ‘invalid’. There is a ‘Docker image URL is invalid’ thread which has a solution but that solution involves going to the Project tab in the app and creating a new Project. The legacy Docker app has no Projects tab - I assume that solution is referring to the Container Manager app which is not available on DSM 7.1.1 The legacy Docker app does have a ‘Registry’ category which seems like it might apply. Where and what are the proper entries in the legacy Docker app to retrieve the roonserver:latest image? (I do have a GitHub account if it is needed.)

Tell us about your home network

· All Ubiquiti Unifi - UDM-Pro router, 24 port POE switch

Hello @Raymond_Elseth,

Thank you for reaching out, and excellent detective work.

You can absolutely bypass this using the Registry tab you found. Because Synology defaults to Docker Hub, we just need to manually add GitHub’s registry first.

Here is how to retrieve the image:

Option 1: Using the Registry Tab

  1. Open the Docker app and go to the Registry tab.
  2. Click Settings at the top, then click Add.
  3. Fill in the following details:
  • Registry Name: GHCR (or anything you prefer)
  • Registry URL: https://ghcr.io
  • Leave the username and password blank (the Roon image is public).
  1. Click Apply or OK.
  2. Back on the main Registry tab, use the search bar to search for: roonlabs/roonserver
  3. Double-click the result (or select it and click Download) and choose the latest tag.

Once the download finishes, the image will appear in your Image tab, and you can proceed with the “Launch” instructions in Method 2!

Option 2: The SSH Shortcut (If the GUI still refuses) If the legacy GUI gives you any further trouble, you can bypass it entirely using SSH.

  1. Enable SSH in your Synology Control Panel (Terminal & SNMP).
  2. Use a terminal (Mac) or Command Prompt/PuTTY (Windows) to SSH into your NAS: ssh your_username@your_nas_ip
  3. Run this single command: sudo docker pull ghcr.io/roonlabs/roonserver:latest
  4. Enter your password when prompted.

Once the terminal finishes downloading the image, you can close it. When you open the Docker app on your DSM interface, the Roon image will magically be sitting in your Image tab, ready to launch.

Give the Registry method a try first, and let us know if you are able to get the container running and we will update our documentation accordingly!

I now have the image in Legacy Docker. The entries suggested for updating the Legacy Docker Registry didn’t work; I had to enable SSH (which took some fumbling around on my part). Once that was done, the image downloaded without issues.

For future use, here is the Legacy Docker Registry update sequence I attempted:

When you click on Registry, the default registry contents are displayed:

Click on Settings and you will see this:

Click on Add, enter the items you suggested, and you get this:

Click on Confirm and the Registry list looks like this:

Highlight ghcr.io and select Use and you get this:

At that point I am stymied and I reverted to SSH.

I’ll make another entry to discuss next steps.

Continuing…..

I have the Roon image in the Legacy Docker Image list.

I am looking at Method 2 in the ‘Install Roon Server on Synology with Docker’ document.

Before I begin the install, I am concerned about the settings discussed in Step 6.

Prior to 2.65, I had a working Roon Server installation running for several years on my Synology NAS using the third-party Roon on Synology package. I had been applying Roon updates as they came out; I believe I was on 2.64 before I unknowingly applied 2.65 and bricked my Roon Server. I still have the third-party Roon Server on Synology with 2.65 applied. I also have Roon backups on Dropbox, although these will be 2.64 or earlier. I also have a 2.65 Roon Client on a Windows PC that will start but will not find a Roon Server (of course).

My Synology DS1515+ is configured with a four-drive spinning RAID array and a SSD. The SSD is used as a Roon disk with all my music on the RAID array.

Step 6 of Method 2 discusses manually remapping the server-based Roon files to ‘…newly created…’ versions. I have should-be-valid existing files for all the paths suggested. I also have existing Roon backups.

Is it a good idea to point all the Step 6 paths to the files used by my existing Roon Server configuration to replicate what had been a functioning system?

Should I restore my latest Roon Dropbox backup once I get a running Roon Server?

If so, when?

My Roon library is not large and has very little custom tailoring. I could do a full new install if it is a better idea but I would prefer to restore what I had before 2.65.

What’s the next step?

Hello @Raymond_Elseth,

Using SSH is a great move—it is often much more reliable than the older Synology Docker UI when dealing with custom registries like ghcr.io. Since you already have the image downloaded, running the container via the command line will ensure the configuration is exactly as intended.

1. The docker run Command

Since you are already comfortable with SSH, you can deploy the server using this command. It is much less prone to the “bad result” errors you encountered in the UI.

Before running this, ensure you have created three empty folders on your NAS (e.g., RoonData, RoonBackups, and your Music folder).

(Note: Be sure to change the folder paths on the left side of the : to match your actual Synology share locations, and update the TZ to your local timezone.)

2. Handling Folders and Backups

Regarding the folder mapping (Step 6):

  • Fresh Start: You can point the container to completely empty folders. Docker will automatically generate the necessary directory structure inside them the moment the container starts.
  • Existing Music If you want to keep your history, you can point the default Music folder to empty space and add additional mounts to the Docker container with your music. After restoring the backup, you can edit the existing path to your actual music storage; this will avoid a complete re-scan.
  • Restoring Your Database: If you have an existing Roon backup, there are two ways to handle it:
    1. Initial Setup: When you first open the Roon app and connect to this new server, the “Welcome” screen will ask if you want to set up a new library or “Restore from Backup.” You can simply point it to your RoonBackups folder inside the Container.
    2. Manual Move: Alternatively, you can restore the backup even after the initiall activation using the Settings → Backup → Find Backup.

Let us know if the container spins up successfully!

Again I feel we have a failure to communicate…..

I have established a RoonDocker shared folder on my NAS ssd and created two empty sub-folders, RoonBackups and RoonData. I plan on pointing the install to my music file which exists on the same NAS.

When I launch Docker on my NAS I see:

When I click on ‘Launch’ I see:

When I accept the defaults and click on ‘Next’ I see:

At this point I am stymied.

So far as my ability with ssh goes, I can start it and enter commands by rote. I do not see a screen anything like the screenshot you provided. I see:

What is the next step?

Hello @Raymond_Elseth

I completely understand, and please don’t worry—you aren’t doing anything wrong! That black SSH window with the blinking cursor definitely looks intimidating if you haven’t encountered it before. There are no graphical buttons or mice there—it’s just a text interface. But you’ve already done the hardest part by successfully logging in!

To make this as painless as possible and avoid typing out complex commands manually, we built a Command Generator (Configurator). It will do all the heavy lifting for you.

Here is how we can get Roon running right now. You have two options, and both work perfectly:

Method 1: The Easiest Way (Just Copy and Paste)

Since you already have that black SSH window open, we can launch Roon with one single command.

  1. Open our official configurator tool here: Roon Docker Configurator

  2. On that page, select your device type Synology, your timezone, and type in the correct paths to your folders (where your music lives, and where you created the RoonData folder).

  3. At the top of the page, you will see a block of text generated for you that starts with docker run.... Simply copy that entire block of text.

  4. Go back to your black SSH window, paste that text in (usually by right-clicking), and hit Enter on your keyboard.

That’s it! Docker will automatically download Roon and launch it in the background.

Method 2: Creating the File with “Nano” (For Beginners)

If you still want to create the docker-compose.yml file as advised earlier, you can actually do that right inside the black SSH window using a simple built-in text editor called nano.

Here is a step-by-step beginner’s guide on how to use it:

  1. In your black SSH window, type the following command: nano docker-compose.yml …and hit Enter. The screen will change slightly—you are now inside an empty text file (with some shortcut hints at the bottom).

  2. Open our Configurator, set up your folders as described in Method 1, but click on the Docker Compose tab. Copy the text it generates for you there.

  3. Go back to your black SSH window and paste that text in (usually a right-click).

  4. Now for the most important part—saving and exiting:

  • Press Ctrl + O on your keyboard (that is the letter “O” for Output/Save).
  • Press Y and Enter to confirm the file name.
  • Press Ctrl + X to exit the editor.
  1. You will be back at the standard blinking cursor prompt. Now, just type this command: docker-compose up -d …and press Enter.

Either of these methods will guarantee your Roon Server starts up. I recommend trying Method 1 as it is the absolute fastest. Let us know if you hit any roadblocks along the way!

Been on holiday… will try your approach

The syntax wasn’t rejected but it failed on a permission error:

Next step?

Don’t want to hit the 7 day close… Status?

Hi @Raymond_Elseth,

Apologies for the delay! The error is clear from your screenshot — your user account doesn’t have permission to access the Docker daemon. The fix is simple: just add sudo at the beginning of the command.

In your SSH window, run the same command but with sudo prepended:


sudo docker run -d \

 --name roonserver \

 --network host \

 -e ROON_INSTALL_BRANCH=production \

 -e TZ=America/Louisville \

 -v /volume2/RoonDocker/Roon:/Roon \

 -v /volume1/Public/Music:/Music \

 -v /volume2/RoonDocker/RoonBackups:/RoonBackups \

 --log-driver local \

 --restart unless-stopped \

 ghcr.io/roonlabs/roonserver:latest

It will ask for your password — enter the same password you used to log in. That’s it!

Let us know if it starts up successfully.

I have Roon Core running on Synology using Legacy Docker. Roon auto-updated to 2.67 and I can reach it from my pre-existing Windows 11 Roon client.

I updated the docker parms as you instructed and executed them. The result was:

The result was obviously not an error but it didn’t really tell me what came next. The result string looked like the hash from a program download, which was positive. I noted that there was a ‘restart’ parm in the parm string so I exited from ssh and restarted the server. After the server restart I went into the installed apps frame, opened docker, and looked at the container list. I saw Roon there and checked the docker log, which said that Roon had started:

I then opened my pre-existing Roon Windows client. The client found the new Core and I went through the dialog to force off the old Core and log into the new Core. During the re-login process I possibly made one error. I saw a option to select ‘Music Folder’, without further qualification. My music was already in a pre-existing location on the server so I skipped the unqualified ‘Music’ folder and explicitly added my pre-existing folder, resulting in this:

It took about five minutes to import all my tracks into Roon Core.

I decided to let Roon Core re-analyze my music and not to attempt to restore my prior Roon backups. Roon Core is running Background Audio Analysis at a rather slow rate - I’ll keep an eye on that.

I went through the setup parms and adjusted those that I had changed in my prior installation. Everything went as expected until I attempted to set up Backup. I am backing up to Dropbox, and I used this repository without issue with the previous installation. When I went through the Dropbox setup dialog I did the various sign up stuff, got a code to allow Roon Core to connect to Dropbox, and supplied that code where requested by Roon Core. When I attempted to save the completed parms I got this:

I suspect this might be another permissions issue since Dropbox sees Roon Core through a different interface than was used with the previous installation.

To sum up:
Roon Core runs under Legacy Docker.
Roon Core sees my existing music on the same server as is running Roon Core.
Roon Client does everything it did when connected to the previous installation of Roon Core.

Issues:
Is disabling the default ‘Music’ folder likely to cause any future problems?
Is there a reason why Roon Client won’t remember the window location when I relocate the window then restart the client?
How do I address the 'Network error:" message when attempting to set up a backup to Dropbox?

This has been a pretty long message chain to get to this point. If you prefer, we can close this ticket and I’ll start three new tickets to address the three issues above.

Hi @Raymond_Elseth,

Congratulations on getting Roon Core running — that was quite a journey and you handled it very well!

Let me address your three questions:

1. Disabling the default ‘Music’ folder
No problem at all — in fact this is actually the better approach. Your library is now linked directly to your specific folder path, which means if you ever need to migrate again, you can restore a backup and simply edit the existing storage path to the new location without losing any of your library data or metadata.

2. Roon Client window position
This is controlled by your operating system, not by Roon. Windows manages window position and size for applications, so Roon has no direct control over where the window opens after a restart. This is expected behavior.

3. Dropbox ‘Network error’
Looking at your logs from that session, the Dropbox authentication actually completed successfully — the token exchange returned Status=Success and the account check also passed. It’s possible the error appeared briefly during the connection handshake before it completed, or it resolved itself. Could you try setting up the Dropbox backup again and see if the error reappears? If it does, please note the exact time and let us know.

06/03 16:13:01 [Local 06/03 12:13:01] Info: [broker/dropbox] authenticating
06/03 16:13:01 [Local 06/03 12:13:01] Trace: [roondns] flushed 7 last-known-good entries
06/03 16:13:01 [Local 06/03 12:13:01] Debug: [easyhttp] [7173] POST to https://api.dropboxapi.com/oauth2/token returned after 695 ms, status code: 200, request body size: 134 B
06/03 16:13:01 [Local 06/03 12:13:01] Info: [broker/dropbox] authenticating result: Result[Status=Success]
06/03 16:13:01 [Local 06/03 12:13:01] Info: [broker/dropbox] checking account authentication
06/03 16:13:02 [Local 06/03 12:13:02] Debug: [easyhttp] [7174] POST to https://api.dropboxapi.com/2/users/get_current_account returned after 494 ms, status code: 200, request body size: 0 B
06/03 16:13:02 [Local 06/03 12:13:02] Info: [broker/dropbox] account authentication check result: Result[Status=Success]
06/03 16:13:02 [Local 06/03 12:13:02] Debug: [easyhttp] [7175] POST to https://api.dropboxapi.com/oauth2/token returned after 247 ms, status code: 200, request body size: 159 B
06/03 16:13:02 [Local 06/03 12:13:02] Debug: [broker/filebrowser/drive] GetEntries: doing LsDir of Dropbox , /
06/03 16:13:02 [Local 06/03 12:13:02] Debug: [easyhttp] [7176] POST to https://api.dropboxapi.com/2/files/list_folder returned after 361 ms, status code: 200, request body size: 11 B

Happy listening!

Thanks for the quick response.

  1. Disabling the Default ‘Music’ folder - understood.
  2. Roon Client window position - on my system (Windows 11, 25H2) all other Windows apps, specifically the Qobuz Windows app, restart at the screen position where they were last closed without further action on my part. I’ll open another ticket on this.
  3. Dropbox ‘Network Error’ - I did in fact retry the Dropbox setup about 30-45 mins after the time of the logs you quote. The dialog completed without errors. In particular, this time the dialog did not ask me for the Dropbox code that it wanted on the first pass. I’ve since forced a backup to get a baseline and also allowed the scheduled backup to run. Both ran with no errors and I can see both in the Backup Recovery dialog. I agree that the error I received must have been a Dropbox ‘burp’

One more question then we can close this out…

I mentioned that I chose not to attempt to restore any of my existing backups from the pre-2.65 environment in order to get a clean baseline install of the 2.65+ environment. I now recognize that this means I’ve lost all my local playlists (a considerable number). Is it possible to restore playlists only from a 2.64 backup?