„Hey Portainer, Dockhand is my new home.“ So heißt der Beitrag, der diese Woche in r/selfhosted ganz oben stand. Das Timing ist kein Zufall: Vor zwei Wochen hat Portainer erklärt, dass Version 3.0 ohne Community Edition kommt, und seitdem sehen sich viele nach einem neuen Zuhause für ihre Container um. Dockhand ist neun Monate alt, hat rund 6.500 Sterne auf GitHub und will genau diese Lücke füllen. Ich habe Handbuch, Releases und Issues durchgesehen und zeige dir, was es kann, wo es noch jung ist und wie du es in zehn Minuten zum Laufen bringst.

Kurz gesagt: Dockhand ist eine Weboberfläche für Docker: Container starten und stoppen, Compose-Stacks im Browser anlegen, Logs, Terminal, Update-Check, Schwachstellen-Scan und Backups, alles kostenlos für den Privatgebrauch. Am Ende läuft es auf Port 3000, mit Admin-Konto und Zwei-Faktor-Anmeldung. Dauer: etwa 10 Minuten. Stufe: Standard (Docker und Kommandozeile im Groben bekannt). Stand: Dockhand v1.0.49, geprüft am 26-09-2026.
Schaubild: Dockhand in drei Schritten, Docker-Gruppe finden, Container starten, Login einschalten
Der ganze Weg auf einen Blick: Gruppennummer holen, Container starten, Anmeldung einschalten.

Was Dockhand ist und was es von Portainer unterscheidet

Dockhand ist ein Container, der deine anderen Container verwaltet. Du öffnest eine Webseite und siehst dort alles, was auf deinem Server läuft: welche Container aktiv sind, wie viel Speicher sie belegen, für welche ein neues Image bereitliegt. Du liest Logs, öffnest ein Terminal im Container, lädst Dateien hinein und legst neue Compose-Stacks im Browser an, ohne SSH. Das ist genau die Aufgabe, die Portainer seit Jahren hatte.

Der Entwickler heißt Jarek Kr und beschreibt sich im Unraid-Forum als intensiven Unraid-Nutzer. Das Repository ist Ende Dezember 2025 entstanden, seit März 2026 gibt es 31 Releases, drei davon im September, das letzte am 23-09-2026. Das Tempo ist hoch. Es freut mich ehrlich, wenn jemand in neun Monaten etwas hinstellt, das Leute freiwillig von Portainer wegzieht. Und dasselbe Tempo macht mich vorsichtig, weil ein Projekt, das alle zehn Tage ein Release schiebt, auch mal stolpert. Die Issues bestätigen das, dazu unten mehr.

Drei Dinge unterscheiden es von Portainer CE, so wie ich Handbuch und Startseite lese:

  • Der Umfang der Gratis-Version. Schwachstellen-Scan der Images, Anmeldung per OIDC/SSO, Zwei-Faktor-Login, Backups von Volumes auf S3 oder Backblaze, Git-Deployments mit Webhooks: alles ohne Lizenzschlüssel. Bezahlt werden Rollen und Rechte, LDAP und ein Audit-Log, also Dinge, die Firmen brauchen. Der Satz auf der Startseite fasst es zusammen: „Authentication is free. RBAC is enterprise.“
  • Kein Swarm, kein Kubernetes. Dockhand verwaltet Docker Engine und Podman, sonst nichts. Die Anfrage nach Swarm liegt seit dem 04-01-2026 als Issue #58 offen, ohne Antwort. Wer Swarm nutzt, ist hier falsch. Wer Docker Compose fährt, vermisst nichts.
  • Die Lizenz. Dockhand steht unter der Business Source License 1.1, nicht unter einer klassischen Open-Source-Lizenz. Der Code liegt offen, du darfst ihn privat, im Verein, in der Schule und intern in der Firma nutzen. Nur als bezahlten Hosting-Dienst darfst du ihn nicht anbieten. Am 01-01-2029 wandelt sich die Lizenz automatisch in Apache 2.0. Für ein Homelab ändert das nichts. Für meinen Stein im Brett für Open Source ist es ein halber Punkt Abzug, und ich sage dazu, warum er nur halb ist: Der Code ist lesbar, und das Datum steht fest.
Was du bekommstKostenlosEnterprise (1.499 $ pro Host und Jahr)
Umgebungen (Docker-Hosts)unbegrenztunbegrenzt
Container, Stacks, Git, Backupsjaja
Schwachstellen-Scanjaja
Login per OIDC/SSO, Zwei-Faktorjaja
Rollen und Rechte (RBAC)nein, jeder Benutzer ist Adminja
LDAP/Active Directory, Audit-Logneinja

Die Zeile mit den Rollen ist die, die du dir merken solltest: In der Gratis-Version hat jeder angemeldete Benutzer volle Admin-Rechte. Für dich allein ist das egal, für einen Mitbewohner, der nur seine Jellyfin-Logs sehen soll, nicht.

Was du brauchst

  • Einen Linux-Server mit Docker und Docker Compose. Prüfen mit docker compose version. Dockhand verlangt Docker Engine 20.10 oder neuer; docker version zeigt die Nummer im Abschnitt „Server“. Fehlt Docker, hilft die Docker-Compose-Anleitung für Einsteiger.
  • 512 MB freien Arbeitsspeicher, das Handbuch empfiehlt 1 GB. Prüfen mit free -h.
  • Einen freien Port 3000. Prüfen mit ss -tlnp | grep 3000; keine Ausgabe heißt frei. Läuft dort schon etwas, zum Beispiel das Homepage-Dashboard aus unserer Anleitung, nimmst du in der Compose-Datei links vom Doppelpunkt eine andere Nummer, etwa 3010. Wie du den Belegten findest, steht in Port belegt? So findest du den Schuldigen.
  • Einen Benutzer, der Docker-Befehle ausführen darf, also in der Gruppe docker ist oder sudo hat.
  • IP-Adresse deines Servers: 192.168.178.20
  • Ordner für die Compose-Datei: ~/dockhand
  • Nummer der Docker-Gruppe auf dem Server: 999 (findest du in Schritt 1)
  • Port für die Oberfläche: 3000
So liest du diese Anleitung: Alles, was du selbst tun sollst, steht in einem farbigen Kasten. [ per klick ] heißt: Das erledigst du mit der Maus in einer Web-Oberfläche, hier der Dockhand-Oberfläche im Browser. [ über die shell ] heißt: Den Befehl kopieren, ins Terminal einfügen, Enter. Stehen beide Kästen direkt untereinander, führen sie zum selben Ergebnis. Du gehst EINEN davon, nicht beide.

Schritt 1: Die Nummer der Docker-Gruppe finden

Dockhand redet mit Docker über eine Datei: /var/run/docker.sock. Wer diese Datei beschreiben darf, darf Docker alles befehlen, und genau darum ist sie geschützt: Sie gehört root und der Gruppe docker, sonst niemand kommt heran.

Docker-Socket? Eine Datei, die sich wie ein Telefonhörer verhält. Wer hineinspricht, redet direkt mit der Docker-Engine. Docker selbst legt sie an; jedes Werkzeug, das Container verwaltet, braucht Zugriff darauf. Zugriff auf den Socket ist gleichbedeutend mit Root-Rechten auf dem Server, weil man damit jeden beliebigen Container mit jedem beliebigen Ordner starten kann.

Der Dockhand-Container läuft laut Handbuch nicht als root, sondern als Benutzer 1000. Das ist gut, heißt aber: Er muss zusätzlich Mitglied der Gruppe docker werden, sonst bekommt er beim Zugriff „permission denied“. Gruppen kennt der Container nur als Nummer, und die ist auf jedem System anders. Deshalb holst du sie dir zuerst.

stat -c '%g' /var/run/docker.sock

Die Ausgabe ist eine einzelne Zahl, bei Debian und Ubuntu meist:

999

Steht bei dir 998 oder 990, ist das genauso richtig. Merk dir die Zahl, sie kommt gleich in die Compose-Datei. Zur Einordnung, wer hier mit wem redet:

Browser→ Port 3000 →Dockhand→ docker.sock →Docker-Engine→ steuert →deine Container

Schritt 2: Ordner und Compose-Datei anlegen

Die Compose-Datei ist das Rezept, nach dem Docker den Container baut. Sie stammt aus dem Dockhand-Handbuch, Abschnitt „Docker Socket Permissions“, in der Variante mit PUID/PGID und Gruppenzuordnung. Zwei Dinge habe ich geändert: Das Image ist auf v1.0.49 festgenagelt statt auf latest, und die Gruppennummer trägst du aus Schritt 1 ein.

mkdir -p ~/dockhand && cd ~/dockhand
nano compose.yaml

In den leeren Editor kommt dieser Inhalt. Die Zeile - "999" ersetzt du durch deine Zahl aus Schritt 1, in Anführungszeichen:

services:
  dockhand:
    image: fnsys/dockhand:v1.0.49
    container_name: dockhand
    restart: unless-stopped
    environment:
      - PUID=1000
      - PGID=1000
    group_add:
      - "999"
    ports:
      - "3000:3000"
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - dockhand_data:/app/data

volumes:
  dockhand_data:

Speichern mit Strg+O, Enter, den Editor schließen mit Strg+X. Was die Zeilen tun:

  • image: fnsys/dockhand:v1.0.49 holt genau diese Version. Mit latest würde dir der nächste beiläufige docker compose pull eine neue Version unterschieben, und bei einem Projekt mit drei Releases im Monat will ich selbst entscheiden, wann das passiert. Das Image gibt es für amd64 und arm64, ein Raspberry Pi 4 oder 5 ist also dabei.
  • PUID und PGID legen fest, als welcher Benutzer der Container innen arbeitet. 1000 ist auf den meisten Systemen der erste angelegte Benutzer.
  • group_add ist die Zeile, um die es geht: Sie macht den Container zum Mitglied der Docker-Gruppe, damit er den Socket benutzen darf.
  • ports: links der Port auf deinem Server, rechts der im Container. Ist 3000 belegt, änderst du nur die linke Zahl.
  • volumes: Der Socket kommt durchgereicht, und dockhand_data ist ein von Docker verwaltetes Volume, in dem Datenbank, Stacks und der Schlüssel für gespeicherte Passwörter liegen. Es überlebt Neustarts und Updates.

Ob die Datei fehlerfrei ist, sagt dir Docker, bevor irgendetwas startet. Keine Ausgabe heißt: alles in Ordnung.

docker compose config --quiet

Schritt 3: Starten und anklopfen

docker compose up -d
docker compose ps

Beim ersten Mal lädt Docker das Image herunter, das dauert je nach Leitung eine halbe Minute. Danach zeigt ps eine Zeile mit Up:

NAME       IMAGE                    COMMAND                  SERVICE    CREATED         STATUS                   PORTS
dockhand   fnsys/dockhand:v1.0.49   "/sbin/tini -- /usr/…"   dockhand   7 seconds ago   Up 6 seconds (healthy)   0.0.0.0:3000->3000/tcp, [::]:3000->3000/tcp

Das Image ist klein, weil es auf Wolfi-Paketen aufsetzt, einer schlanken Linux-Basis für Container. Läuft sofort, das macht mich normalerweise misstrauisch; hier ist es die Bauweise. Jetzt der Browser: http://192.168.178.20:3000, mit deiner Server-IP. Beim ersten Aufruf liegt ein Fenster mit den Release Notes über dem Dashboard, Got it schließt es. Container siehst du noch keine: Erst unter Settings, Reiter Environments, mit Add environment die lokale Umgebung anlegen (Name frei, etwa Homelab; Connection type Unix socket, der Socket path /var/run/docker.sock ist vorbelegt; Test connection meldet „Connected!“, dann Add). Danach zeigt Containers links in der Seitenleiste alle Container, die auf dem Server laufen, inklusive Dockhand selbst. Der erste Blick auf die eigene Container-Liste in einer fremden Oberfläche ist ein kleiner Moment. Genieß ihn kurz, und dann bitte sofort weiter zu Schritt 4.

Schritt 4: Die Anmeldung einschalten, bevor du irgendetwas anderes tust

Das Handbuch sagt es in einem Satz, den ich wörtlich hierher stelle: „On first launch, authentication is disabled. Go to Settings > Authentication to enable authentication and create your first admin user.“ Übersetzt: Bis du das erledigt hast, hat jedes Gerät in deinem Heimnetz ohne Passwort Vollzugriff auf Dockhand, und Dockhand hat Vollzugriff auf Docker. Ich hätte mir hier einen Einrichtungs-Assistenten gewünscht, der das Konto erzwingt, so wie Uptime Kuma oder Jellyfin es tun. Solange der fehlt, ist dieser Schritt kein optionales Feintuning, sondern Teil der Installation.

Stand Dockhand 1.0.49: Links in der Seitenleiste Settings, dann den Reiter Authentication öffnen. Zuerst unter Users mit Add user das erste Admin-Konto anlegen (Username, im Beispiel admin, Password, Confirm password, Create user), dann den Schalter Authentication auf ON; er greift sofort, einen Speichern-Knopf gibt es nicht. Dein eigenes Fenster bleibt dabei angemeldet, die Anmeldemaske erscheint erst beim nächsten Aufruf der Adresse. Nimm ein Passwort aus deinem Passwort-Manager, nicht das vom Router.

Das Fenster Add user in den Dockhand-Einstellungen mit dem Username admin und den beiden gefüllten Passwortfeldern, unten rechts der Knopf Create user.
(1) Username: admin; (2) Passwort eintragen; (3) Hier klicken
Der Reiter Authentication in den Dockhand-Einstellungen: der Schalter Authentication steht auf ON, darunter die Benutzerliste mit dem Konto admin.
(1) Reiter Authentication; (2) Schalter auf ON

Erfolgskontrolle: Öffne http://192.168.178.20:3000 in einem privaten Browserfenster. Erscheint eine Anmeldemaske statt des Dashboards, ist die Tür zu. Direkt danach die Zwei-Faktor-Anmeldung, die Dockhand für lokale Konten kostenlos mitbringt:

Stand Dockhand 1.0.49: Im Profil (Klick auf den Kontonamen unten in der Seitenleiste, im Beispiel admin) im Abschnitt Two-factor authentication auf Setup MFA klicken, den angezeigten QR-Code mit einer Authenticator-App scannen (Aegis, Bitwarden, 2FAS) und den sechsstelligen Code eintippen; erst dann wird der Knopf Enable MFA aktiv.

Das Fenster Setup two-factor authentication im Profil von admin: oben der QR-Code für die Authenticator-App, darunter das Feld Verification code für den sechsstelligen Code.
(1) QR-Code mit der App scannen; (2) Sechsstelligen Code eintippen

Schritt 5: Erster Rundgang

Die Seite Containers ist der Ort, an dem du die meiste Zeit verbringen wirst. Jeder Container hat ein Menü für Start, Stop, Neustart, Logs, Terminal und Dateien. Das, was Portainer-Umsteiger als Erstes suchen, ist der Update-Check:

Stand Dockhand 1.0.49: Auf der Seite Containers oben Check for updates klicken. Dockhand vergleicht jedes laufende Image mit der Registry und markiert die, für die eine neuere Fassung bereitliegt.

Die Seite Containers in Dockhand mit dem Knopf Check for updates oben und darunter der Liste mit dem laufenden Container dockhand.
(1) Hier klicken; (2) Container dockhand

Erfolgskontrolle: Nach dem Lauf tragen Container mit verfügbarem Update eine Markierung in der Liste. Ist nichts zu tun, erscheint kurz die Meldung „All containers are up to date“, und keine Zeile trägt eine Markierung. Ob du das Update dann per Klick einspielst, ist deine Entscheidung; ich würde bei Datenbanken und allem mit Major-Versionssprung vorher die Release Notes lesen, so wie du es auch ohne Dockhand tun würdest. Deine bestehenden Compose-Stacks tauchen unter Compose Stacks auf; das Handbuch beschreibt dort, wie Dockhand Stacks übernimmt, die nicht von ihm angelegt wurden. Neue Stacks legst du auf derselben Seite im Editor an, der die YAML-Datei prüft, bevor er sie startet. Seit Version 1.0.49 kannst du Container und Stacks mit Tags versehen und die Übersicht danach gruppieren; genau die fehlende Gruppierung war im Unraid-Forum einer der ersten Kritikpunkte, und es freut mich, dass sie so schnell nachgeliefert wurde.

Was am Ende eingestellt ist

  • Benutzer: ein Admin-Konto mit Zwei-Faktor. Jeder weitere Benutzer, den du unter Authentication anlegst, ist in der Gratis-Version ebenfalls Admin. Leg also nur Leute an, denen du auch SSH-Zugang geben würdest.
  • Daten: alles im Volume dockhand_data, laut Handbuch mit der Datenbank unter db/dockhand.db, den Compose-Dateien unter stacks/ und der Datei .encryption_key, die gespeicherte Zugangsdaten verschlüsselt. Backup-Tick, du kennst ihn: Sichere das Volume als Ganzes. Ziehst du Dockhand auf einen anderen Server, müssen .encryption_key und der Ordner db/ zusammen mitkommen, sonst sind die gespeicherten Registry-Passwörter unlesbar. Wie Volumes in ein Restic-Backup kommen, zeigt der Backrest-Beitrag, sobald er live ist.
  • Updates: Dockhand aktualisiert deine anderen Container, sich selbst nicht. Dafür änderst du die Versionsnummer in der Compose-Datei und startest neu: docker compose pull && docker compose up -d. Einmal im Monat reicht, und vorher die Release Notes lesen: Nach dem Update auf 1.0.19 blieb der Container auf ARM-Geräten stehen (Issue #674, inzwischen behoben). Bei diesem Tempo passiert so etwas wieder.
  • Erreichbarkeit: Port 3000 ist im ganzen Heimnetz offen, und Docker trägt ihn an deiner Firewall vorbei ein, wie in Docker UFW: Ports trotz Firewall offen beschrieben. Das Handbuch sagt klar, dass Dockhand eine Admin-Oberfläche ist und nicht ins Internet gehört. Von unterwegs erreichst du es über ein VPN wie wg-easy; hängst du es hinter einen Reverse Proxy auf demselben Server, änderst du die Port-Zeile auf "127.0.0.1:3000:3000", dann ist es nur noch über den Proxy zu sehen.
  • Der Socket: Dockhand hat Root-Rechte auf deinem Server, weil es den Docker-Socket hat. Das gilt für Portainer genauso und ist kein Dockhand-Problem, aber ein Grund, die Oberfläche wie SSH zu behandeln. Wer das enger ziehen will, findet im Handbuch eine Variante mit einem Socket-Proxy, der nur ausgewählte Docker-Befehle durchlässt. Für den Anfang reicht das Login mit Zwei-Faktor.

Wo es klemmt

  • „permission denied“ beim Anlegen der lokalen Umgebung: Das ist im Handbuch der erste Punkt unter Troubleshooting, und die Ursache ist fast immer die Gruppennummer. Führe stat -c '%g' /var/run/docker.sock noch einmal aus, vergleiche mit der Zeile unter group_add, korrigiere und starte mit docker compose up -d neu. Das Handbuch listet sechs Wege; der hier ist der, den es empfiehlt.
  • Speicherhunger: Zwei geschlossene Issues (#361 und #600) beschreiben stark wachsenden Arbeitsspeicher, einmal innerhalb von 24 Stunden, einmal, wenn eine entfernte Umgebung nicht erreichbar war. Beide gelten als behoben. Behalte docker stats dockhand in der ersten Woche im Auge; bleibt der Wert unter ein paar hundert Megabyte, ist alles gut.
  • Langsame NAS-Übersicht: Dockhand fragt regelmäßig die Plattenbelegung aller Volumes ab. Auf einem NAS mit vielen großen Ordnern bremst das, und die Umgebungsvariable SKIP_DF_COLLECTION=true in der Compose-Datei schaltet die Abfrage ab.
  • Port-Klick öffnet nichts: Im Unraid-Forum berichten mehrere Nutzer, dass der Klick auf einen Port in der Container-Liste in ihren Browsern keine Weboberfläche öffnet. Das ist ein Komfortproblem, kein Funktionsproblem: Adresse und Port von Hand eintippen geht immer.

Für wen sich der Wechsel lohnt

Wenn du heute neu anfängst und eine Oberfläche für Docker suchst, würde ich Dockhand nehmen. Der Funktionsumfang der Gratis-Version ist größer als der von Portainer CE, das Image ist schlank, und die Entwicklung läuft. Wenn du Portainer CE im Einsatz hast, gibt es keinen Grund zur Eile: 2.45 LTS bekommt bis Mai 2027 Sicherheitsupdates. Du kannst Dockhand einfach daneben laufen lassen; beide lesen nur den Socket und kommen sich nicht in die Quere. Nach zwei Wochen weißt du, welches Fenster du öfter öffnest.

Ehrlich bleibt der Reifegrad: 354 offene Issues, ein Projekt, hinter dem nach allem, was Forum und Repository zeigen, im Kern ein einzelner Entwickler steht, und eine Lizenz, die erst 2029 richtig frei wird. Für ein Homelab, in dem du der Admin bist, ist das in Ordnung. Für den Server eines Vereins mit zehn Leuten und verschiedenen Rechten würde ich noch abwarten, ob die Rollen irgendwann in die Gratis-Version wandern.

Welches Fenster hast du offen, Portainer, Dockhand, Dockge, Komodo oder gar keins, weil dir die Shell reicht? Schreib's in die Kommentare, mich interessiert vor allem, was dich beim letzten Wechsel überzeugt hat.

Ob Dockhand die Rollen irgendwann freigibt und wie sich Portainer 3.0 nach dem Start schlägt, steht dann im Newsletter, sonntags, ohne Werbung.

Quellen