Dockhand mit Docker installieren: Anleitung für Windows und Linux

Dockhand ist eine Weboberfläche zur Verwaltung von Docker-Containern, Images und Compose-Stacks. Die Anwendung läuft selbst als Container und verbindet sich mit der Docker Engine. Diese Anleitung zeigt die Installation mit docker run und mit Docker Compose.

Wähle einen der beiden Installationswege. Beide Beispiele verwenden den Containernamen dockhand und Port 3000 und können deshalb nicht gleichzeitig gestartet werden.

Alle Befehle in diesem Artikel werden in einer Linux-Shell ausgeführt: unter Linux im normalen Terminal, unter Windows im Terminal einer WSL-2-Distribution. So funktionieren die Befehle auf beiden Systemen gleich.

Voraussetzungen unter Linux und Windows

Linux

Installiere die Docker Engine und das Docker-Compose-Plugin für deine Distribution. Stelle sicher, dass dein Benutzer Docker-Befehle ausführen darf.

Windows

Installiere Docker Desktop mit WSL 2 und verwende den Modus Linux containers. Aktiviere in Docker Desktop unter Settings → Resources → WSL Integration deine Linux-Distribution. Öffne anschließend deren Terminal. Die folgenden Docker-Befehle gehören ins WSL-Terminal, nicht in PowerShell. Weitere Einzelheiten stehen in der Docker-Anleitung zur WSL-Integration.

Prüfe unter Linux beziehungsweise im WSL-Terminal, ob Docker erreichbar ist:

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

Wenn docker ps keine Verbindung zur Docker Engine herstellen kann, prüfe zunächst, ob Docker läuft. Unter Windows muss außerdem die WSL-Integration für die verwendete Distribution aktiviert sein.

Dockhand benötigt laut Herstellerdokumentation mindestens 512 MB Arbeitsspeicher; empfohlen wird 1 GB. Die folgenden Beispiele verwenden deshalb ein Speicherlimit von 1 GB.

Lizenzhinweis: Private Nutzung sowie Entwicklungs- und Testeinsatz sind nach den aktuellen Dockhand-Lizenzbedingungen möglich. Für die produktive Nutzung in Unternehmen und öffentlichen Stellen ist eine kommerzielle Lizenz erforderlich.

Variante 1: Dockhand mit docker run installieren

Der folgende Befehl startet Dockhand im Hintergrund. Die Weboberfläche ist zunächst nur auf dem eigenen Rechner erreichbar. Das Docker-Volume dockhand_data speichert die Anwendungsdaten dauerhaft.

docker run -d \
  --name dockhand \
  --restart unless-stopped \
  --memory=1g \
  --memory-swap=1g \
  --group-add "$(stat -c '%g' /var/run/docker.sock)" \
  -p 127.0.0.1:3000:3000 \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -v dockhand_data:/app/data \
  fnsys/dockhand:latest

--memory=1g begrenzt den Arbeitsspeicher auf 1 GB. Da --memory-swap ebenfalls auf 1 GB steht, erhält der Container darüber hinaus keinen zusätzlichen Swap-Speicher. Wenn Dockhand unter Last mehr Speicher benötigt, kann Docker den Container beenden. Beobachte deshalb später den Verbrauch und passe das Limit gegebenenfalls an. Die Optionen erklärt die Docker-Dokumentation zu Ressourcenlimits.

Die Gruppen-ID des Docker-Sockets wird mit stat ermittelt und dem Container über --group-add zugewiesen. Das hilft, wenn Dockhand sonst keinen Zugriff auf den Socket erhält.

Start und Speicherverbrauch prüfen

docker ps --filter name=dockhand
docker logs --tail=50 dockhand
docker stats dockhand

Falls der Container nicht mehr läuft, prüfe, ob er wegen Speichermangels beendet wurde:

docker inspect --format '{{.State.OOMKilled}}' dockhand

Die Ausgabe true weist auf ein Speicherproblem hin. Prüfe dann die Logs und erhöhe das Limit bei Bedarf.

Variante 2: Dockhand mit Docker Compose installieren

Docker Compose ist praktisch, wenn du die Installation in einer Datei dokumentieren und später ändern möchtest. Erstelle im Linux- oder WSL-Terminal ein Verzeichnis:

mkdir -p ~/dockhand
cd ~/dockhand

Lege darin mit einem Texteditor eine Datei namens compose.yaml mit folgendem Inhalt an:

services:
  dockhand:
    image: fnsys/dockhand:latest
    container_name: dockhand
    restart: unless-stopped
    mem_limit: 1g
    memswap_limit: 1g
    group_add:
      - "${DOCKER_GID}"
    ports:
      - "127.0.0.1:3000:3000"
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - dockhand_data:/app/data

volumes:
  dockhand_data:

Erzeuge im selben Verzeichnis eine .env-Datei mit der Gruppen-ID des Docker-Sockets. Der folgende Befehl trägt den Wert automatisch ein:

printf 'DOCKER_GID=%s\n' "$(stat -c '%g' /var/run/docker.sock)" > .env

Prüfe die Konfiguration und starte Dockhand:

docker compose config
docker compose up -d
docker compose ps
docker compose logs --tail=50 dockhand

Wenn docker compose config einen Fehler meldet, korrigiere zunächst die Datei compose.yaml oder die .env-Datei.

Weboberfläche öffnen und Anmeldung einrichten

Öffne auf dem Rechner, auf dem Dockhand läuft, http://127.0.0.1:3000. Bei einer Installation mit Docker Desktop unter Windows kannst du die Adresse im Windows-Browser aufrufen.

Auf einem entfernten Linux-Server kannst du von deinem eigenen Rechner einen SSH-Tunnel öffnen:

ssh -L 3000:127.0.0.1:3000 benutzer@server

Solange die SSH-Verbindung besteht, erreichst du Dockhand auf deinem Rechner ebenfalls unter http://127.0.0.1:3000.

Aktiviere unmittelbar nach dem ersten Start die Anmeldung. Laut Dockhand-Handbuch ist die Authentifizierung anfangs deaktiviert. Öffne Settings → Authentication und erstelle einen Administrator mit einem starken Passwort. Anschließend kannst du für den Benutzer MFA aktivieren. Bewahre die Wiederherstellungscodes sicher auf.

Prüfe unter Settings → Environments die Verbindung zur lokalen Docker-Umgebung. Danach sollten die Container des Hosts in Dockhand sichtbar sein.

Docker-Socket und Netzwerkzugriff absichern

Über den eingebundenen Docker-Socket kann Dockhand weitreichende Änderungen am Docker-Host ausführen. Behandle deshalb sowohl den Socket-Zugriff als auch die Dockhand-Anmeldung als hoch privilegiert. Setze den Socket bei Berechtigungsproblemen nicht pauschal mit chmod 666 für alle Benutzer frei.

Die Installationsbeispiele binden Port 3000 nur an 127.0.0.1. Wenn andere Geräte Dockhand erreichen sollen, richte einen begrenzten Zugang über ein VPN oder einen Reverse Proxy mit HTTPS und zusätzlicher Zugangskontrolle ein. Veröffentliche die Administrationsoberfläche nicht einfach direkt im Internet. Weitere Hinweise bietet das Dockhand-Handbuch.

Wo speichert Dockhand seine Daten?

Das Volume dockhand_data enthält unter anderem Dockhands lokale Datenbank und den Schlüssel für verschlüsselt gespeicherte Zugangsdaten. Du kannst das Volume prüfen mit:

docker volume inspect dockhand_data

Das Volume bleibt erhalten, wenn du den Dockhand-Container entfernst. Es ersetzt aber kein Backup.

Wenn du später über Dockhand Compose-Stacks mit relativen Datei-Bind-Mounts wie ./config.yml:/config.yml bereitstellen willst, musst du auf die Host-Pfade achten: Der Docker-Daemon muss die Dateien unter dem aufgelösten Pfad erreichen können. Das Dockhand-Handbuch beschreibt dafür eine Installation mit passenden Host- und Containerpfaden. Unter Windows mit Docker Desktop und WSL ist diese Pfadzuordnung besonders sorgfältig zu prüfen. Für einen einfachen Einstieg auf beiden Systemen verwende zunächst das hier gezeigte benannte Volume; nutze in verwalteten Stacks nach Möglichkeit ebenfalls benannte Volumes.

Ersetze bei einer bestehenden Installation dockhand_data nicht einfach durch ein leeres Hostverzeichnis. Vor einem Wechsel müssen auch die Datenbank und der Verschlüsselungsschlüssel vollständig gesichert und migriert werden.

Dockhand-Daten und Anwendungsdaten sichern

Ein Backup muss zwei Bereiche abdecken: die Dockhand-Daten im Volume dockhand_data und die Daten der verwalteten Anwendungen in deren eigenen Volumes oder Bind-Mounts. Ein Backup von Dockhand sichert nicht automatisch die Inhalte deiner Datenbank- oder Dateiserver-Container.

Dockhand bietet Funktionen für geplante Backups. Richte ein geeignetes Sicherungsziel ein und teste die Wiederherstellung. Bei laufenden Datenbanken solltest du zusätzlich prüfen, wie ein konsistenter Sicherungsstand erzeugt wird.

Dockhand aktualisieren

Der Image-Tag fnsys/dockhand:latest ist für den Einstieg bequem. Bei einem späteren Download kann er jedoch auf eine neue Version zeigen. Für kontrollierte Updates solltest du die Dockhand-Releases prüfen, deine Daten sichern und einen festen Versionstag verwenden.

Bei einer Compose-Installation änderst du den Image-Tag in compose.yaml und führst im Verzeichnis der Datei aus:

docker compose pull
docker compose up -d
docker compose logs --tail=100 dockhand

Bei einer Installation mit docker run reicht docker restart nicht aus, um ein neues Image zu verwenden. Der Container muss mit dem gewünschten Image neu erstellt werden. Dokumentiere deshalb deinen Startbefehl und binde beim neuen Container dasselbe Daten-Volume wieder ein.

Häufige Fragen

Reichen 256 MB RAM für Dockhand?

256 MB liegen unter dem vom Hersteller genannten Minimum von 512 MB. Das in dieser Anleitung verwendete Limit von 1 GB ist ein Ausgangswert. Den tatsächlichen Verbrauch prüfst du mit docker stats dockhand.

Was bedeutet „permission denied“ beim Docker-Socket?

Vergleiche die Ausgabe von stat -c '%g' /var/run/docker.sock mit dem Wert von --group-add beziehungsweise dem Eintrag DOCKER_GID in der .env-Datei. Starte den Container nach einer Korrektur neu.

Kann ich docker run und Docker Compose gleichzeitig verwenden?

Nicht mit den hier gezeigten Einstellungen. Beide Varianten verwenden denselben Containernamen und Port. Entscheide dich für einen Installationsweg und behalte dessen Daten-Volume bei.

Funktioniert die Anleitung auch auf Windows Server?

Der Windows-Teil beschreibt Windows 10 oder 11 mit Docker Desktop, WSL 2 und Linux-Containern. Docker Desktop unterstützt Windows Server laut Docker nicht. Dafür ist eine separate Server-Konfiguration erforderlich.

Fazit

Mit Docker Desktop und WSL 2 auf Windows sowie mit Docker Engine auf Linux lässt sich Dockhand mit denselben Befehlen installieren. Für den dauerhaften Betrieb sind vor allem ein geschützter Zugriff, passende Docker-Socket-Berechtigungen, ausreichend Arbeitsspeicher und verlässliche Backups wichtig. Richte unmittelbar nach dem Start die Anmeldung ein, bevor du weitere Benutzer oder Netzwerkzugriffe zulässt.