Docker images for Roon

Hi everybody,

I’ve created a pull request to Steef_de_Bruijn’s GitHub repository providing support for docker-compose. Please give it a try and provide some feedback.


I’ve tried hard but I could never get a DSP working when running Roon in a Docker container. Is there anybody else having the same issue. I’m currently running Roon in a trial period. Could that be the root cause for not being able to access DSP functions?

No the trial is the full version. What hardware are you trying to run Roon on?

This is client specific. Generally small display remotes like phones and some tablets (UI in portrait mode) are missing the DSP settings a.f.a.i.k.

But how do I control the DSP settings using Android phones or Linux machines. I do not have a MAC nor Windows machine.

Use WINE to run the Windows version. Here are the forum threads that discuss this working solution:

I hope this helps to get you started.

@Christophe_Beuille @maciekb sorry to bother you both, but could one of you post a screenshot of your unraid Roon docker configuration?

I am having real trouble with mine and suspect I’m missing something stupid.

Mine works fine until I reboot unraid, at which point the core just seems to get wiped out. The folders are there but no data.

I tried to restore from backup and although it said successful, it just keeps ‘waiting for core’

I’m running the latest stable version of unraid (6.5.something)

I’m mapping the library and app data to an ssd cache drive, to a folder that contains other dockers (and does not get moved).

Any help greatly appreciated.

Hi BenniMac,

I do not use anymore the docker image provided by Steef. I have build my config from another image (ronch/roon-server) but the settings should be equivalent.

Hope it helps,

Regards, Christophe

1 Like

Thanks Christophe, I really appreciate it. Although your Unraid UI looks different to mine, the configuration looks the same. Attached is mine, can you spot anything different or incorrect?

I too am using the ronch/roon-server image.

@BenniMac, you’re pointing everything to the same, identical, folder, presumably on your cache drive, but I can’t be sure from here.

try pointing /music to where your music is :wink:

Thanks @Xekomi for your assistance. I was just importing music from my music server once the container was ready, via Roon. Could this be the issue? I will experiment and see what happens if I map it across as I probably should have in the first place.

It’s entirely possible that it was saturating your cache drive :wink: - so do check for that. Also, make absolutely sure you are using a cache drive for /opt/ and /var/roon, you’ll really regret it otherwise.

What you’d probably want to do in terms of importing is designate a user share, map that as the /music folder to the docker, copy the stuff over, and only then launch the docker, and let it run overnight to index and grab the metadata it needs. If it fails, Roon won’t have touched your files anyway, so it isn’t a loss of time.

Hmmm, still having trouble. Even if I add nothing. Close Roon, restart the server, it’s gone when it comes back up, even though the docker is running. One thing I noticed, when I look at Docker allocations after reboot, next to port is has ???

Does this provide any clues?

Also, @Xekomi the reason I have been adding my music files via Roon, after the container has been setup, is because I have them on another Unraid server which just serves music, so I don’t have access to them as a share from the roon server, if that makes sense.

It does take a minute to come back up. You can check what’s going on from the log (click on the line that starts with “uptime” on the right of the docker management page). I wouldn’t set it to auto-start on server reboot until the issues are ironed out.

Yeah, you might want to specify it manually to the default port (and make sure you don’t have some type of conflict with another app wanting it), so 9003.

I’m trying to get my head around that - if I understand properly, you’re doing a transfer via a third machine, so Unraid A => your computer => Unraid B ?

I’d still strongly recommend setting up a share called “music”, anywhere BUT on the cache drive of the machine hosting your Roon docker. I’d also check how much space is available on the cache drive, just in case the trouble you’re getting is because you saturated your cache drive with music.

Also, fwiw and last I checked, the combo of Roon-on-mac and Roon-on-unraid-docker didn’t like files being dragged-and-dropped on the mac app, and just crashed, so I just SSH stuff up. That may be what you’re seeing.

You might also want to install the ronch docker (since that’s what both @Christophe_Beuille and myself have running), or ask the guy who did yours for assistance, there might be something there as well.

Ok, an update on my issue, in case it helps others in future. I started again from scratch today, and followed all of @Xekomi 's advice re. mapping the a music folder to a share on the server, adding in the port and I also realised I was putting the app and library in the same folder? Should that matter? I would have thought not, but I separated them out. With all of this I now seem to have a stable version of Roon running in a docker, woo hoo! I’ve tried several reboots and it has come back up and worked fine.

@john I’ve referenced you here rather than the support thread I raised, so I could provide a single answer for those looking in future.

Thanks to @Xekomi @Christophe_Beuille for their help resolving this and @john for raising with the Roon devs. Now to enjoy some music and evaluate this thing properly :grin:


Running your image on Ubuntu 18.4 server on top of esxi for some time now. Stable, perfect, just liesten to the music, as it was intended.
Thanks, appreciate your work and effort.

I’m looking for advice about the best processor affinity for pinning a docker image running roon on unraid. I’ve been using @Steef_de_Bruijn’s docker image for over a year.

roonlabs says that roon is optimized for two high-speed CPUs in their white paper about the Nucleus design. (linked from here)

The optimal hardware platform for Roon is one which provides a small number of high-speed CPU cores. To provide the best possible user experience, Roon is designed to take advantage of a high-speed dual-core CPU, fast RAM, and a fast SSD.

I have unraid running on a machine with a Xeon E3-1245 v3 cpu. It has four cores with hyperthreading. Also have 32GB of DDR3 1600 RAM (fast enough I hope:). roon is running off of the SSD cache drive.

On this machine, unraid’s docker configuration page permits a docker image to be pinned to one or more of CPUs 0-3 and HTs 4-7. I interpret CPU 0-3 as the first of each pair of hyperthreads on cores 0-3, and HT 4-7 as the second of each pair of hyperthreads on cores 0-3.

[Update: I checked the specs of all four CPUs used in the 7th generation NUCs, some of which are used in the two Nucleus products. All four are hyperthreaded dual-core CPUs.]

It looks like combinations such as CPU0+HT0+CPU1+HT1 or even CPU0+CPU1+CPU2+CPU3 would emulate the dual-core hyperthreaded CPU roon is optimized for.

Any advice from roonlabs or docker users would be appreciated. Does pinning four cores improve roon’s performance without degrading unraid itself? Which combinations work better?

- Eric

I am using a slightly altered Docker setup. I am using docker-compose and I am connecting my KEF LS50W via USB to the Docker host (Ubuntu 18.04 server, minimal install with Docker 18.09 from the Ubuntu repos.

I am running Ubuntu on a Intel Nuc i3 (third gen core i3 with 16GB of memory and a 120GB sata M2 SSD) and it works great! No need to buy CPU overkill NUCs.

I have the issue that Linux sets the volume in the audio mixer to 31. I need it to go to 100. Volume control is done on the KEF itself and not via Roon.
So you have to set the volume to 100%. You can do that via a shell in the running container or just via the Roon controller on your phone/tablet/windows/mac
I have stored the values in a state file and mount them via docker on /var/lib/alsa/asound.state
I put the restore settings in the script of the container.
I have also done some /dev mounts. Those dev files are my LS50W device files
In my setup I am using native networks via VLANs, but you don’t have to!

My docker-compose yaml.

version: '3'
    build: .
    image: roon:latest
    container_name: roon_server
    hostname: roonserver
    restart: unless-stopped
      - TZ="Europe/Amsterdam"
      - ./app:/app
      - ./data:/data
      - ./music:/music
      - ./backup:/backup
      - ./asound.state:/var/lib/alsa/asound.state
      - /dev/snd/controlC1
      - /dev/snd/pcmC1D0p


   external: true

My Dockerfile

FROM debian:9.9
ENV DEBIAN_FRONTEND noninteractive
ENV ROON_SERVER_PKG RoonServer_linuxx64.tar.bz2

RUN apt-get update \
    && apt-get -y upgrade \
    && apt-get -y install bash curl bzip2 ffmpeg cifs-utils alsa-utils

VOLUME [ "/app", "/data", "/music", "/backup" ]

RUN chmod 755 /

My file

cd /app
if test ! -d RoonServer; then
  tar xjf $ROON_SERVER_PKG
/usr/sbin/alsactl restore

To make it all working. I have put it all in /opt/roon

mkdir -p /opt/roon/app /opt/roon/data /opt/roon/music
cp docker-compose.yml /opt/roon
cp Dockerfile /opt/roon
cp /opt/roon
cd /opt/roon
docker-compose build
docker-compose up -d

Thanks for sharing -

I copied your setup and used the network-mode “host” every thing is fine, my server is recognized but sadly a can’t login. It throws a network error. :frowning:

roon_server | terminate called after throwing an instance of ‘OpenHome::NetworkError’
roon_server | Stacktrace:
roon_server |
roon_server | Cannot transition thread 0x7fb680a37700 from STATE_BLOCKING with DO_BLOCKING
roon_server | at <0xffffffff>
roon_server | Not responding
roon_server | Error
roon_server | Initializing
roon_server | Started
roon_server | aac_fixed decoder found, checking libavcodec version…
roon_server | has mp3float: 1, aac_fixed: 0
roon_server | terminate called after throwing an instance of ‘OpenHome::NetworkError’
roon_server | Stacktrace:
roon_server |
roon_server | at <0xffffffff>
roon_server | at (wrapper managed-to-native) OpenHome.Net.ControlPoint.CpDeviceListUpnpServiceType.CpDeviceListCreateUpnpServiceType (intptr,intptr,uint,OpenHome.Net.ControlPoint.CpDeviceList/CallbackDevice,intptr,OpenHome.Net.ControlPoint.CpDeviceList/CallbackDevice,intptr) [0x00030] in <21295a8acb1a4b59920209b723ef0864>:0
roon_server | at OpenHome.Net.ControlPoint.CpDeviceListUpnpServiceType…ctor (string,string,uint,OpenHome.Net.ControlPoint.CpDeviceList/ChangeHandler,OpenHome.Net.ControlPoint.CpDeviceList/ChangeHandler) [0x00042] in <21295a8acb1a4b59920209b723ef0864>:0
roon_server | at OpenHome.Net.ControlPoint.CpUpnpDeviceListFactory.CreateListServiceType (string,string,uint,OpenHome.Net.ControlPoint.CpDeviceList/ChangeHandler,OpenHome.Net.ControlPoint.CpDeviceList/ChangeHandler) [0x00007] in <21295a8acb1a4b59920209b723ef0864>:0
roon_server | at Sooloos.Broker.Transport.SongcastDirect.ReInit () [0x00235] in :0
roon_server | at Sooloos.Broker.Transport.SongcastDirect…ctor (Sooloos.Broker.State,Sooloos.Broker.Transport.Module) [0x0007e] in :0
roon_server | at Sooloos.Broker.Transport.Module.Enable () [0x001e9] in :0
roon_server | at Sooloos.Broker.Transport.Module.UpdateEnabled () [0x00035] in :0
roon_server | at Sooloos.Broker.Transport.Module.b__74_0 (Sooloos.Broker.Api.LoadStatus) [0x00001] in :0
roon_server | at Sooloos.Broker.LoadStatus.b__35_0 (System.Action`1<Sooloos.Broker.Api.LoadStatus>) [0x00002] in <b547e

Any suggestions?