SCM-Manager NAS installation guide?

Hi…is there any installation documentation for a Synology NAS’s available?

I trying installing the docker image and after fireing up the image I got an java error like this.

I already think there is a misconfiguration of the image settings but i have no idea what exactly.

        java.lang.IllegalStateException: could not modify home directory at /var/lib/scm
	at sonia.scm.BasicContextProvider.error(BasicContextProvider.java:177)
	at sonia.scm.BasicContextProvider.findBaseDirectory(BasicContextProvider.java:163)
	at sonia.scm.BasicContextProvider.<init>(BasicContextProvider.java:83)
	at sonia.scm.SCMContext.getContext(SCMContext.java:74)
	at sonia.scm.lifecycle.BootstrapContextListener.getInjector(BootstrapContextListener.java:82)
	at com.google.inject.servlet.GuiceServletContextListener.contextInitialized(GuiceServletContextListener.java:45)
	at sonia.scm.lifecycle.BootstrapContextListener.contextInitialized(BootstrapContextListener.java:73)
	at sonia.scm.lifecycle.BootstrapContextFilter.initializeContext(BootstrapContextFilter.java:57)
	at sonia.scm.lifecycle.BootstrapContextFilter.init(BootstrapContextFilter.java:48)
	at org.eclipse.jetty.servlet.FilterHolder.initialize(FilterHolder.java:133)
	at org.eclipse.jetty.servlet.ServletHandler.lambda$initialize$2(ServletHandler.java:725)
	at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(Unknown Source)
	at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Unknown Source)
	at java.base/java.util.stream.ReferencePipeline$Head.forEach(Unknown Source)
	at org.eclipse.jetty.servlet.ServletHandler.initialize(ServletHandler.java:749)
	at org.eclipse.jetty.servlet.ServletContextHandler.startContext(ServletContextHandler.java:392)
	at org.eclipse.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1305)
	at org.eclipse.jetty.server.handler.ContextHandler.doStart(ContextHandler.java:902)
	at org.eclipse.jetty.servlet.ServletContextHandler.doStart(ServletContextHandler.java:306)
	at org.eclipse.jetty.webapp.WebAppContext.doStart(WebAppContext.java:533)
	at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:93)
	at org.eclipse.jetty.util.component.ContainerLifeCycle.start(ContainerLifeCycle.java:171)
	at org.eclipse.jetty.util.component.ContainerLifeCycle.doStart(ContainerLifeCycle.java:121)
	at org.eclipse.jetty.server.handler.AbstractHandler.doStart(AbstractHandler.java:89)
	at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:93)
	at org.eclipse.jetty.util.component.ContainerLifeCycle.start(ContainerLifeCycle.java:171)
	at org.eclipse.jetty.server.Server.start(Server.java:470)
	at org.eclipse.jetty.util.component.ContainerLifeCycle.doStart(ContainerLifeCycle.java:114)
	at org.eclipse.jetty.server.handler.AbstractHandler.doStart(AbstractHandler.java:89)
	at org.eclipse.jetty.server.Server.doStart(Server.java:415)
	at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:93)
	at sonia.scm.server.ScmServer.init(ScmServer.java:65)
	at sonia.scm.server.ScmServer.run(ScmServer.java:36)
	at sonia.scm.server.ScmServerDaemon.main(ScmServerDaemon.java:34)

Hello @vnvjan,

how do you start the Docker Image. Which arguments are you using?

I don’t start it by command line. Only over Container Manager in Synology’s DSM.

Using the default (latest) docker image @ Docker Hub.

The Synology container config is attached.

I think its an issue with the rights, mapping SCM home path to a local path @ Synology

The local folder has full rights for owner, ContainerManager and admins.

scm-manager.json.zip (963 Bytes)

Nachdem ich fast daran verzweifle, erscheint mir das Problem nicht ganz schlüssig.

Ich habe es sowohl auf einer Hardware NAS als auch eine virtualisierten NAS getestet und bin immer wieder aufs gleiche Ergebnis gekommen.

Umgebung: Synology NAS DS220+ mit DSM 7.3 (81180)

Habe Container mittels Assistenten oder Projekt (Compose) angelegt…lokaler Port auf 8080 gesetzt und SCM-Home auf lokalen “beschreibbaren“ Ordner auf der NAS gesetzt.

Habe sogar versucht über die Aufgabenplanung SCM zum Laufen zu überreden…nichts half bisher.

docker run -d --name=scm -p 8080:8080 -v /var/lib/scm:/volume1/docker/scm-manager/scm-home -–restart=always scmmanager/scm-manager:latest

Was mir schon als erstes aufgefallen ist…SCM wird mit Nutzer (UID 1000) gestartet, welchen es auf einer Syno NAS nicht gibt. Das verwirrt schon mal ordentlich.

Ordner+Dateien werden beim ersten Start angelegt. Dabei ist Startseite http://nas:8080/scm nicht erreichbar.

Neustart des Container probiert → Ergebnis bleibt gleich…SCM startet einfach nicht durch, Startseite bleibt nicht erreichbar.

Laut Console hängt sich der Start immer an der gleichen Stelle auf (siehe Log)

2025-10-24 08:24:37.690 [main] [          ] INFO  sonia.scm.lifecycle.modules.EagerSingletonModule - initialize eager singleton sonia.scm.initialization.DefaultInitializationFinisher

SynologyContainer_Log.zip (2.3 KB)

Einen Health Check kann ich auch nicht durchführen lassen, da es kein CURL im Image gibt. Warum fehlt sowas eigentlich???

Hi!

Sorry für die Verzweiflung. Die konnte ich tatsächlich eben etwas nachvollziehen, sollte aber eine Lösung für dich gefunden haben.

Es ist tatsächlich so, dass der SCM-Manager im Docker-Container aktuell den User 1000 fest gesetzt hat. Wir nehmen mal eine Story auf, dass die UID konfigurierbar ist, können aber nicht sagen, wann wir zu der Umsetzung kommen (Hilfe ist bei sowas aber immer gerne gesehen und wir unterstützen gerne).

Auf meiner Synology starte ich den SCM-Manager ganz schlicht per Kommandozeile (eigentlich genau so, wie in deinem Beispiel) und er läuft zuverlässig.

Als ich das aber eben mit einem zweiten Container nachstellen wollte, bin ich etwas ins Schwimmen geraten: Es hat einfach nicht mehr funktioniert und ich habe dieselben could not modify home directory Fehler bekommen, von denen Du berichtest.

Ich habe dann versucht, die Berechtigungen für das Verzeichnis manuell zu setzen. Das sah zunächst richtig aus, der Server hatte aber noch immer dieselben Fehler. Ich habe dann Berechtigungen für Gruppe und Other zurückgesetzt, und auf einmal fehlten alle Berechtigungen (d-------). Da scheint die Synology etwas … durcheinander zu kommen. Beim nächsten Setzen blieben die Berechtigungen dann aber bestehen und der Server startet bis zum DefaultInitializationFinisher, also ebenso wieder wie bei dir.

Hier scheint das Problem zu sein, dass das NAS nicht genug Zufall erzeugen kann um den initialen Token zu generieren. Das passiert eigentlich nur bei Maschinen, die ganz neu installiert wurden.

Um das zu umgehen, kannst Du ein initiales Passwort für einen ersten User beim Start per Umgebungsvariable SCM_WEBAPP_INITIALPASSWORD mitgeben. Der Befehl sieht dann in etwa so aus:

docker run \
  --name scm \
  -d \
  -e SCM_FORWARD_HEADERS_ENABLED=true \
  -p 8080:8080 \
  -v /volume1/scm/scm-home:/var/lib/scm \
  -e SCM_WEBAPP_INITIALPASSWORD=scmadmin
  --restart always \
  scmmanager/scm-manager:latest

Damit hast Du dann den Benutzer scmadmin mit dem Passwort scmadmin. Du kannst dann eigene User anlegen und den scmadmin löschen oder deaktivieren. Bei weiteren Starts wird dieser User nicht mehr erstellt, solange mindestens ein anderer User existiert.

Ich hoffe, das hilft dir weiter.

Zu den anderen Fragen:

Im Docker Image ist kein curl enthalten, da nicht benötigte Binaries in der Regel als Sicherheitslücken angesehen und daher vermieden werden.

Als Health Endpoint verwenden wir schlicht den API Endpunkt (http://localhost:8080/scm/api/v2).

Viele Grüße
René

Einfach herrlich…vielen Dank…funktioniert jetzt prima

Super, tausend Dank für die Rückmeldung und viel Erfolg!