Docker image for Roon Extension Manager [Now also for ARM]

I created a Docker Image for the Roon Extension Manager!

This image should be runnable on the more powerful models of the Synology and QNAP NAS’es, although, I cannot test this myself so let me know how this works out.

It can also be used by installing the Docker Community Edition on your PC or Mac.

Here is the link to the image:

https://hub.docker.com/r/theappgineer/roon-extension-manager

Setup instructions are there as well. The Dockerfile can be found on GitHub.

I’m new to Docker so suggestions for improvements are more than welcome

4 Likes

Just installed the image on my Synology NAS. Works perfectly. Thanks a lot!

1 Like

Thanks for getting back to me!

Could you use the command line options of the run command directly, or did you have to make the translation to web interface settings?

I used the Synology web interface.

Hi @Michael_Kletzin,

Would be nice if you could post some screenshots with the settings you are using, this might help others.

The installation on Synology NASes is pretty simple:

sorry for the screenshots in German language.

  1. Download the image

Paste the URL from the first post:

Select the latest version

Wait for the download …

  1. Start the docker image for the first time

select advanced options and activate the automatic restart:

Share the network with the host:

That’s it

I have activated the automatic restart. Without this option the docker images stops from time to time. Don’t know why …

1 Like

Thanks for providing these instructions Michael!

The automatic restart is necessary to get the extensions up and running again after an automatic update.

There is one additional setting that might be relevant if you want to use the Alarm Clock extension, and that is the time zone.

You set this by creating an environment variable in the Environment tab of the Advanced settings. Create a variable called TZ and set the Value to the name of the timezone, in your case ‘Europe/Berlin’.

1 Like

Do you need to paste the roon-extension-manager.sh file into the container? I keep getting the error that the file is missing. When I added the .sh file, I then got an error in the logs that systemctl1 needs to be installed.

docker: Error response from daemon: OCI runtime create failed: container_linux.go:348: starting container process caused “exec: “./roon-extension-manager.sh”: stat ./roon-extension-manager.sh: no such file or directory”: unknown.

That shouldn’t be necessary.

Can you tell a bit more about your setup?

  • On what device do you run Docker (PC, NAS, …)?
  • Which version of Docker is installed?
  • Do you run Docker from the command line or do you use a GUI / web interface?

Running docker on an Intel NUC with Ubuntu Server as my core OS. I’ve kept things very simple on this device, it’s for the most part a dedicated Docker server. I’m running the latest version of Docker, I believe 18.05.

Yes, I run docker from the command line. I was wondering if it was possibly an issue with permissions and where I’m mounting the volume? Anything I need to be aware of here.

Also, I’ve tried to set this up via docker-compose (my preferred method to manage containers) and ran into the same issue.

Can be, the roon-extension-manager.sh script is stored in the volume so it will be an issue if it can’t be accessed. How do you run docker commands, via sudo or did you add a user account to the docker group?

Did you mount the volume to a specific location, or did you only name it as I did in my command line example?

Usually without sudo (my user account is added to the docker group) but I also tried sudo in this case to troubleshoot.

I mounted it to a specific location (not the one in your command line), it’s the same folder that I store all of my docker configuration files without issues.

I changed my setup to mimic yours, i.e. add normal user to docker group and mount volume to a directory of this user. With these settings I can reproduce you issue :slight_smile:

I get it working again by using the default volume location:

-v roon-extensions:/root/.RoonExtensions/lib

(The first part, roon-extensions, is now the name of the volume)

You could gives this a try as a workaround, then I will see if I can find a fix for this.

Ok, I’ll go ahead and use the default volume. It’s not a big deal, I just prefer to have all of my docker configs in the same place for organization.

Thanks a bunch for all of your help with this!

The thing is that the -v option can be used in two different ways.

The first is for creating a bind mount, this is what you used by specifying an absolute path. This is useful if you want to make a directory of the host system available to the container.

The second is for creating a Docker controlled volume. This is useful to separate container generated data from the container itself. In this case the argument before the colon specifies the name of the volume.

The roon-extension-manager image uses the second option to separate the installed extensions from the image itself, this makes things easier in case of an image update. By using a bind mount the extension directory gets replaced by the empty directory on your host system causing that the extensions can no longer be found.

In summary, you can use the -v option to name the volume or you can leave the -v option out completely to let Docker generate a name for it.

Makes sense, thanks for the clarification. I got it working tonight using docker compose. Here’s the docker-compose configuration I used for anyone interested in copying it.

version: '3'
services:
  roon:
    image: theappgineer/roon-extension-manager
    container_name: roon-extension-manager
    restart: always
    volumes:
      - roon-extensions:/root/.RoonExtensions/lib
    environment:
      - PUID=0
      - GUID=0
      - TZ=America/Chicago
    network_mode: host
volumes:
  roon-extensions:

Edit: Can’t get the formatting right for this, be sure to add the appropriate spaces to the yaml file before each line.

1 Like

Insert a line with 3 backticks before and after your code block

```

After that you can update the indentation.

Thanks for sharing this!

I wasn’t aware of this docker compose stuff, looks like a good way to prevent the long option list of a run command.

Is it OK for you if I put this yaml file in my GitHub repository, besides the Dockerfile?

Yup feel free. Definitely recommend using docker compose! I manage all of my containers using it, super easy to deploy a stack of containers with just the command docker-compose up -d

An updated Docker image is now available (v0.3.2). It solves a problem with timezone handling. This update is especially relevant if you run the Alarm Clock extension within a container.