UGREEN NAS: Jellyfin mit Docker und Hardware-Transcoding einrichten
Teil 80 der UGREEN-Serie: Jellyfin 12.4 im offiziellen Docker-Image, mit eigenem Konto, Medien nur lesend, richtiger Adresse im Bridge-Modus und Intel Quick Sync.
Geprüft am 06.11.2026 · für UGOS Pro 1.21.0.0190, Jellyfin 12.4
WerbelinksMit * markierte Links sind Werbelinks: Bei einem Kauf erhalten wir eine Provision, der Preis bleibt gleich. Als Amazon-Partner verdiene ich an qualifizierten Verkäufen. Mehr dazu

Jellyfin macht aus Ihrer Film- und Videosammlung auf der UGREEN NAS eine Mediathek mit Titelbildern, die Sie im Browser, auf dem Fernseher und auf dem Handy abspielen. Anders als bei Plex brauchen Sie kein Konto bei einem Hersteller, alles läuft auf Ihrer NAS. Diese Anleitung richtet Jellyfin 12.4 mit Docker ein: mit eigenem Konto für den Container, Medien nur lesend, der richtigen Adresse für den Bridge-Modus und Hardware-Transcoding über die Intel-Grafik. Als Beispiel dient eine DXP4800 Pro mit UGOS Pro.
Voraussetzungen
- Eine UGREEN NAS mit der App Docker und fester IP-Adresse, siehe Teil 63 und Teil 9
- SSH-Zugang, siehe Teil 52
- Ein Konto für Container wie dockeruser mit Leserecht auf Ihre Medienfreigabe, siehe Teil 65
- Für Hardware-Transcoding ein Modell mit Intel-Prozessor, siehe Teil 81
- Etwa 40 Minuten
Schritt 1: Projektordner und Datenordner anlegen
Jellyfin speichert Datenbank, Einstellungen und Protokolle im Ordner config. Im Ordner cache liegen Vorschaubilder und die Zwischendateien beim Umwandeln von Videos. Legen Sie beide im Projektordner auf dem SSD-Volume an und stellen Sie sie auf Linux-Rechte um, wie in Teil 65 erklärt. Passen Sie volume2 und die ID 1001 von dockeruser an Ihre NAS an:
sudo -i
mkdir -p /volume2/docker/jellyfin/config /volume2/docker/jellyfin/cache
cd /volume2/docker/jellyfin
ugacltool del_all config
ugacltool del_all cache
chown -R 1001:100 config cache
chmod 750 config cache
ugacltool getace config
exit
It's Linux mode
Neue Ordner unter docker erben sonst die Rechte-Einträge von UGOS, die nur der Gruppe admin Zugriff geben. Ein Container mit den IDs von dockeruser kann dann nicht in seine eigenen Ordner schreiben. Bei Plex führte genau das zu einer Schleife aus Absturz und Neustart, siehe Teil 79.
Verifizieren: sudo ugacltool getace /volume2/docker/jellyfin/cache meldet ebenfalls „It's Linux mode“, und ls -ln im Projektordner zeigt 1001 und 100 als Besitzer und Gruppe.
Schritt 2: Medienfreigabe und Grafikgruppe prüfen
Jellyfin braucht auf Ihre Filme nur Leserecht. Geben Sie dockeruser in der App Dateien für die Medienfreigabe, im Beispiel Videothek, das Recht Nur-Lesen, wie in Teil 65 gezeigt. Prüfen Sie es per SSH:
sudo -u dockeruser ls /volume1/Videothek
Der Befehl muss Ihre Ordner auflisten. Endet er mit „Permission denied“, fehlt der Eintrag für dockeruser. Jellyfin findet sonst keine Filme.
Für die Grafik brauchen Sie die Nummer der Gruppe render, der das Gerät renderD128 gehört:
getent group render
render:x:105:
Auf unserer NAS war das 105. Das offizielle Image von Jellyfin nimmt das Konto nicht selbst in diese Gruppe auf, deshalb tragen Sie die Zahl in Schritt 3 bei group_add ein.
Verifizieren: ls -l /dev/dri zeigt renderD128 mit der Gruppe render, und getent nennt deren Nummer.
Schritt 3: Die Compose-Datei schreiben
cd /volume2/docker/jellyfin
sudo nano compose.yaml
services:
jellyfin:
image: jellyfin/jellyfin:12.4
container_name: jellyfin
hostname: UGREEN-Jellyfin
user: "1001:100"
group_add:
- "105"
environment:
- TZ=Europe/Berlin
- JELLYFIN_PublishedServerUrl=http://192.168.1.10:8096
ports:
- "192.168.1.10:8096:8096/tcp"
devices:
- /dev/dri:/dev/dri
volumes:
- ./config:/config
- ./cache:/cache
- /volume1/Videothek:/medien:ro
restart: unless-stopped
Ersetzen Sie 192.168.1.10 an beiden Stellen durch die Adresse Ihrer NAS und /volume1/Videothek durch den Pfad Ihrer Medienfreigabe. Die wichtigsten Punkte:
- image mit Versionsnummer: So bestimmen Sie selbst, wann Jellyfin aktualisiert wird, siehe Teil 69.
- hostname: Diesen Namen schlägt der Assistent als Servernamen vor. Ohne die Zeile stand bei uns die Kennung des Containers im Feld, eine zufällige Zeichenfolge.
- user: die IDs von dockeruser. Variablen wie PUID und PGID gibt es nur in Images anderer Herausgeber wie linuxserver.io. Beim offiziellen Image gehören die IDs laut Jellyfin-Dokumentation in user.
- group_add: die Nummer der Gruppe render aus Schritt 2. Im Container meldete
iddanach die Gruppen 100 und 105. - JELLYFIN_PublishedServerUrl: die Adresse, die Jellyfin Apps im Heimnetz als lokale Adresse nennt. Ohne die Variable lieferte unser Server die interne Docker-Adresse
http://172.16.11.2:8096, mit ihr die Adresse der NAS. - ports: nur Port 8096 an der Adresse der NAS.
- devices: reicht die Grafikeinheit in den Container, Details in Teil 81.
- /medien:ro: hängt die Videothek nur lesend ein, ein zweiter Schutz zusätzlich zu den Rechten in UGOS.
Starten Sie den Container:
sudo docker compose up -d
sudo docker ps --filter name=jellyfin
Das Image ist rund 1,7 GB groß, der erste Download dauert etwas. Nach etwa einer halben Minute steht hinter Up der Zusatz healthy. Beim ersten Start schreibt Jellyfin viele Warnungen zu Datenbank-Migrationen ins Protokoll, während es die Datenbank anlegt. Am Ende steht „Startup complete“.
Verifizieren: sudo docker exec jellyfin id zeigt uid=1001, gid=100 und die Gruppe 105, und sudo docker logs jellyfin endet mit „Startup complete“.
Schritt 4: Servername und Administratorkonto
Öffnen Sie http://192.168.1.10:8096 mit der Adresse Ihrer NAS. Der Assistent startet automatisch:

Die Anzeigesprache steht zunächst auf English, stellen Sie Deutsch ein. Im nächsten Schritt legen Sie das Administratorkonto an:

Wählen Sie einen eigenen Benutzernamen und ein langes Passwort. Dieses Konto darf alle Einstellungen ändern. Für die Familie legen Sie später unter Dashboard, Benutzer eigene Konten ohne Administratorrechte an.
Verifizieren: Der Assistent wechselt zum Schritt Medienbibliotheken einrichten.
Schritt 5: Die Mediathek anlegen
Klicken Sie auf Medienbibliothek hinzufügen und wählen Sie als Inhaltstyp Filme, für Serien Serien. Der Anzeigename wird automatisch ausgefüllt. Klicken Sie neben Verzeichnisse auf das Plus. Die Auswahl zeigt die Pfade im Container, nicht die auf der NAS:

Ihre Videothek heißt im Container /medien, so wie in der Compose-Datei festgelegt. Die Ordner config und cache erscheinen ebenfalls in der Auswahl, sie gehören nicht in eine Mediathek. Nach OK steht das Verzeichnis im Dialog:

Die Bibliothekseinstellungen weiter unten können Sie so lassen. Wichtig für den Nur-Lesen-Zugriff: Bildmaterial in den Medienverzeichnissen speichern war bei uns ausgeschaltet. Jellyfin legt Titelbilder dann im Ordner config ab und versucht nicht, in Ihre Videothek zu schreiben. Echtzeitüberwachung war eingeschaltet, Jellyfin bemerkt neue Filme damit selbst. Laut dem Benennungsleitfaden von Jellyfin, den der Dialog verlinkt, findet Jellyfin Titel und Bilder in der Filmdatenbank am zuverlässigsten, wenn jeder Film in einem eigenen Ordner nach dem Muster Titel (Jahr) liegt.
Verifizieren: Nach OK zeigt der Assistent die Kachel Filme mit dem Pfad /medien/Filme.
Schritt 6: Sprache und Fernzugriff
Im nächsten Schritt wählen Sie die Sprache für Titel und Beschreibungen aus der Filmdatenbank. Sie stand bei uns auf English und United States. Die Einträge heißen auch in der deutschen Oberfläche englisch:

Danach fragt Jellyfin nach dem Fernzugriff:

Der Haken ist anfangs gesetzt. Entfernen Sie ihn, wenn Jellyfin nur im Heimnetz und über ein VPN erreichbar sein soll. Jellyfin blockiert dann Verbindungen von Adressen, die es nicht für lokal hält. Ihr Heimnetz bleibt erreichbar, auch im Bridge-Modus: Laut Hinweis unter Dashboard, Netzwerk gelten alle privaten Adressbereiche als lokal, solange Sie dort kein eigenes Netz eintragen.

Diese Seite finden Sie nach der Anmeldung im Dashboard unter Netzwerk. RFC1918 meint die privaten Bereiche 10.x.x.x, 172.16.x.x bis 172.31.x.x und 192.168.x.x. In unserem Test erreichte der Mac im Heimnetz Jellyfin mit ausgeschaltetem Fernzugriff ohne Einschränkung. Im Protokoll unter Dashboard, Aktivitäten stand die echte Adresse des Macs, nicht die des Docker-Netzes. Schließen Sie den Assistenten mit Fertig ab und melden Sie sich mit dem neuen Konto an.
Verifizieren: Die Anmeldeseite erscheint, und nach der Anmeldung zeigt die Startseite Ihre Mediathek.
Schritt 7: Die Mediathek prüfen
Jellyfin liest die Ordner direkt nach dem Assistenten ein. Bei zwei Testfilmen dauerte das zwei Sekunden:

Bleibt die Mediathek leer, prüfen Sie das Protokoll auf fehlende Rechte:
sudo sh -c 'grep -iE "permission denied|access to the path" /volume2/docker/jellyfin/config/log/log_*.log'
Gibt der Befehl Zeilen aus, fehlt dockeruser das Leserecht auf der Medienfreigabe, siehe Schritt 2. Danach starten Sie im Dashboard, das Sie über das Profilbild oben rechts erreichen, unter Übersicht den Scan mit Alle Bibliotheken scannen neu.
Verifizieren: Die Startseite zeigt Ihre Filme, und der grep-Befehl gibt nichts aus.
Schritt 8: Hardware-Transcoding einschalten
Kann ein Gerät ein Video nicht direkt abspielen oder ist die Leitung zu langsam, wandelt Jellyfin es während der Wiedergabe um. Ohne Einstellung macht das der Prozessor, denn die Hardwarebeschleunigung steht anfangs auf Keine. Öffnen Sie über das Profilbild oben rechts das Dashboard, dann Wiedergabe, Transkodierung, und wählen Sie Intel Quicksync (QSV):

Das Feld QSV-Gerät bleibt leer. Unter Hardware-Dekodierung aktivieren für waren bei uns nur einige Formate angehakt. Der Prozessor i3-1315U der DXP4800 Pro dekodiert laut vainfo zusätzlich HEVC mit den erweiterten Profilen, MPEG2, VP8, VP9 und AV1, wir haben alle Formate angehakt. Welche Formate Ihre NAS beherrscht, zeigt der Befehl vainfo aus Teil 81. Hardwarekodierung aktivieren war bereits eingeschaltet. Klicken Sie unten auf Speichern und bestätigen Sie den Hinweis, dass die Beschleunigung auf manchen Systemen Probleme machen kann.
Den Transkodierungspfad weiter unten können Sie leer lassen. Jellyfin schreibt die Zwischendateien dann nach /cache/transcodes, also in den Ordner cache auf dem SSD-Volume.
Zum Test spielen Sie einen Film ab und stellen im Player über das Zahnrad unter Qualität eine niedrige Bitrate ein. Bei uns wandelte Jellyfin einen 1080p-Film in H.264 dann auf 960 mal 540 Bildpunkte um. Das Protokoll der Umwandlung liegt unter config/log in einer Datei, deren Name mit FFmpeg.Transcode beginnt:
sudo sh -c 'grep -ho "h264_qsv\|hevc_qsv\|hwaccel vaapi" /volume2/docker/jellyfin/config/log/FFmpeg.Transcode-*.log | sort -u'
h264_qsv
hwaccel vaapi
h264_qsv ist der Encoder der Intel-Grafik. Die Grafik arbeitete laut Protokoll mit rund 590 Bildern pro Sekunde, also 21-facher Echtzeit. Fehlt dort ein Encoder mit qsv, arbeitet der Prozessor. Prüfen Sie dann group_add und devices aus Schritt 3. Das Dashboard zeigt laufende Wiedergaben unter Geräte:

Nach dem Ende der Wiedergabe löscht Jellyfin die Zwischendateien, im Protokoll steht „Deleting partial stream file(s)“. Der Ordner cache/transcodes war danach bis auf eine leere Markierungsdatei namens .jellyfin-transcode leer. Ein Video, das das Gerät direkt abspielen kann, wandelt Jellyfin gar nicht um. Ein HEVC-Film lief in Chrome auf dem Mac ohne Umwandlung, der Player zeigte unter Qualität den Eintrag Auto mit dem Zusatz Direct.
Verifizieren: Die Protokolldatei der Umwandlung nennt einen Encoder mit qsv, und sudo ls /volume2/docker/jellyfin/cache/transcodes zeigt während der Wiedergabe Teilstücke mit der Endung mp4.
Apps verbinden
Jellyfin gibt es als App für Fernseher, Handy und Tablet. Die automatische Suche der Apps nutzt laut Hinweis unter Dashboard, Netzwerk den UDP-Port 7359. Den gibt die Compose-Datei nicht frei, eine Anfrage an diesen Port bekam in unserem Test keine Antwort. Tragen Sie die Adresse in der App von Hand ein: http://192.168.1.10:8096 mit der Adresse Ihrer NAS. Danach melden Sie sich mit Ihrem Jellyfin-Konto an.
Sichern und aktualisieren
Alles, was Jellyfin über Ihre Sammlung weiß, liegt im Ordner config: Datenbank, Konten, gesehene Filme und Einstellungen. Der Ordner cache enthält laut Jellyfin-Dokumentation nur Daten, die sich neu erzeugen lassen, und muss nicht in die Sicherung. Sichern Sie config bei gestopptem Container, wie in Teil 61 beschrieben. Wir haben config bei gestopptem Container als Archiv gesichert, den Ordner ersetzt und aus dem Archiv zurückgespielt. Danach waren Konto, Mediathek und die Einstellung für Quick Sync wieder da. Für ein Update ändern Sie die Versionsnummer in der Compose-Datei und starten neu:
cd /volume2/docker/jellyfin
sudo docker compose pull
sudo docker compose up -d
Nach dem Start belegte Jellyfin rund 245 MiB Arbeitsspeicher, nach dem Einlesen und einer Umwandlung rund 430 MiB.
Typische Fehler
- Servername ist eine zufällige Zeichenfolge: hostname fehlt in der Compose-Datei. Ergänzen Sie die Zeile, erstellen Sie den Container mit
sudo docker compose up -dneu und laden Sie die Seite neu. Den Namen können Sie im Assistenten auch von Hand eintragen. - Mediathek bleibt leer: Die Prüfung aus Schritt 7 findet Zeilen mit fehlenden Rechten. dockeruser fehlt das Leserecht auf der Medienfreigabe, siehe Schritt 2.
- Umwandlung läuft über den Prozessor: Im FFmpeg-Protokoll fehlt h264_qsv. Hardwarebeschleunigung steht noch auf Keine, oder dem Container fehlen devices oder group_add.
- Jellyfin nennt als lokale Adresse eine 172er-Adresse: JELLYFIN_PublishedServerUrl fehlt, Jellyfin meldet dann die interne Docker-Adresse.
- App findet den Server nicht: Die automatische Suche nutzt UDP-Port 7359, den die Compose-Datei nicht freigibt. Adresse von Hand eintragen.
Häufige Fragen
Jellyfin oder Plex?
Beide verwalten Filme und Serien mit Titelbildern und spielen sie auf vielen Geräten ab. Jellyfin braucht kein Konto beim Hersteller, und Hardware-Transcoding ist ohne Abo dabei. Plex setzt dafür laut Hersteller einen Plex Pass voraus und meldet Server und Apps über plex.tv an. Beide können parallel auf derselben NAS laufen, mit jeweils eigenem Port.
Wie komme ich von unterwegs an meine Filme?
Am sichersten über ein VPN ins Heimnetz. Dann bleibt der Fernzugriff von Jellyfin ausgeschaltet, und Sie brauchen keine Portfreigabe am Router. Hat das VPN einen privaten Adressbereich wie 10.x.x.x, zählt Jellyfin es laut Hinweis unter Dashboard, Netzwerk ohne eigenen Eintrag als lokal. Nutzt das VPN andere Adressen, etwa Tailscale mit 100.64.x.x, gehören diese nicht zu RFC1918. Tragen Sie dann Ihr Heimnetz und den VPN-Bereich unter Lokale Netzwerke ein, sonst blockiert Jellyfin bei ausgeschaltetem Fernzugriff diese Verbindungen.
Brauche ich HTTPS?
Im Heimnetz reicht HTTP für die Apps und den Browser. Für den Zugriff über einen Domainnamen setzen Sie einen Reverse Proxy mit Zertifikat davor und tragen dessen Adresse laut Hinweis unter Dashboard, Netzwerk bei Bekannte Proxys ein.
Fazit
Jellyfin läuft auf der UGREEN NAS im offiziellen Image schnell und ohne Konto beim Hersteller. Damit alles stimmt, braucht es ein eigenes Konto mit Leserecht auf die Medien, Datenordner mit Linux-Rechten und drei Angaben in der Compose-Datei: hostname, group_add und die Adresse der NAS. Mit Intel Quick Sync übernimmt die Grafik das Umwandeln, und der Prozessor bleibt frei.


