Dockge selbst hosten: Compose-Stacks bequem per Web-UI
Wer mehrere Docker-Compose-Projekte pflegt, kennt das Problem: Jeder Stack liegt in einem eigenen Ordner,
und die Dateien verwaltet man per Hand. Dockge (vom Uptime-Kuma-Macher) gibt dir dafür eine Web-Oberfläche –
mit einem entscheidenden Unterschied zu Portainer: Deine compose-Dateien bleiben Dateien auf der
Platte und lassen sich weiterhin ganz normal mit docker compose bedienen. In diesem
Tutorial richtest du Dockge mit Docker Compose ein.
Warum Dockge?
Portainer verwaltet Container und Stacks über eine eigene Datenbank – Dockge geht einen anderen Weg: Es ist ein compose-Datei-orientierter Manager. Deine Stack-Ordner liegen auf der Platte, Dockge zeigt sie in einer übersichtlichen UI und bietet Editor, Logs, Terminal und Update-Buttons. Da keine Datenbank „zwischen“ dir und deinen Dateien steht, kannst du jederzeit zur CLI zurückwechseln – oder Dockge sogar parallel zu Portainer betreiben.
compose.yaml. Alles, was docker compose kann, funktioniert weiterhin – Dockge ist
Komfort, kein Ersatz für deine gewohnten Dateien.
Konzept: dateibasiert statt Datenbank
- Stacks-Verzeichnis: Alle Compose-Projekte liegen in einem zentralen Ordner (Default:
/opt/stacks). Jeder Unterordner = ein Stack mit eigenercompose.yaml. - Editor mit Preview: Änderungen an der Compose-Datei lassen sich vor dem Deploy validieren (
docker compose config) und als Diff anzeigen. - Logs, Terminal & Stats: pro Stack direkt in der UI – ohne SSH.
- Deploy / Update / Neustart: entspricht
docker compose up -dbzw.pull+up. - 2-Wege-Prinzip: Dateien außerhalb von Dockge ändern? Beim nächsten Seitenaufruf ist der Stand in der UI aktuell.
Vorbereitung: Ordner & Stacks-Verzeichnis
mkdir -p ~/dockge/data
sudo mkdir -p /opt/stacks
cd ~/dockge
./data→/app/data: Dockge-interne Daten (Einstellungen der UI)./var/run/docker.sock: Zugriff auf die Docker-API – wird für Deploy/Update/Logs benötigt (mounten wie im offiziellen Beispiel, ohne:ro)./opt/stacks: dein Stacks-Verzeichnis. Wer bereits Stacks hat, kann deren übergeordneten Ordner verwenden – Dockge erkennt vorhandenecompose.yaml-Unterordner automatisch.
Docker Compose – die Datei
Deine Vorlage, bereinigt (doppeltes services: entfernt – so wie sie eingefügt war, wäre die Datei ungültig) und kommentiert:
services:
dockge:
image: louislam/dockge:1
restart: unless-stopped
ports:
# Host-Port : Container-Port
- "127.0.0.1:50510:5001" # Web-UI nur lokal, Proxy macht den Rest
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- ./data:/app/data
# Für private Registries: Auth-Datei mit Dockge teilen
# - /root/.docker/:/root/.docker
# Stacks-Verzeichnis (WICHTIG: links === rechts, absolut!)
- /opt/stacks:/opt/stacks
environment:
# Dockge mitteilen, wo die Stacks liegen
- DOCKGE_STACKS_DIR=/opt/stacks
louislam/dockge:1: Das offizielle Setup nutzt das Major-Tag:1– Updates holst du dir damit überdocker compose pull, ohne nach Versionsnummern zu suchen.127.0.0.1:50510:5001: Dockge lauscht intern auf Port 5001, gebunden wird nur an localhost.DOCKGE_STACKS_DIRmuss dem rechten Mount-Pfad entsprechen (/opt/stacks).- Der auskommentierte Registry-Block ist nur nötig, wenn Dockge Images aus privaten Registries ziehen soll (Docker-Login des Hosts).
Konfiguration: Stacks-Pfad & Regeln
| Thema | Erklärung |
|---|---|
DOCKGE_STACKS_DIR=/opt/stacks | Pfad, unter dem Dockge nach Stacks sucht – immer absolut angeben und identisch zum Container-Mount. |
| Linker === rechter Mount | /opt/stacks:/opt/stacks: gleicher Pfad auf Host und im Container – Pflicht, sonst schreibt Dockge Pfade falsch auf. |
| Struktur pro Stack | Jeder Stack ist ein Unterordner mit compose.yaml (+ optional .env, eigene Daten). Vorhandene Ordner tauchen sofort in der UI auf. |
| Eigene Auth | Dockge bringt keine eigene Nutzerverwaltung mit – daher nur im lokalen Netz betreiben oder hinter einem Proxy mit Authentifizierung (Basic Auth, Authelia …). |
| Paralleler Betrieb | Dockge und Portainer stören sich nicht – Dockge arbeitet rein dateibasiert und greift Portainer nicht ins Daten-Handwerk. |
compose.yaml-Ordner unter
/opt/stacks erkennt Dockge automatisch – ein manueller „Import“ ist nicht nötig.
Reverse Proxy & WebSockets
Die UI spricht nur HTTP, der Port lauscht auf localhost – also gehört ein TLS-terminierender Proxy davor. Dockge nutzt für Live-Logs und das Terminal WebSockets, die müssen durchgereicht werden:
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name dg.meine.domain;
# auth_basic "Restricted Content";
# auth_basic_user_file /etc/nginx/.htpasswd;
# ---------------------------------------------------------------- Zertifikat (ECDSA)
ssl_certificate /etc/ssl/private/dg.meine.domain_ecc/fullchain.cer;
ssl_certificate_key /etc/ssl/private/dg.meine.domain_ecc/dg.meine.domain.key;
# ---------------------------------------------------------------- TLS-Feinschliff
ssl_buffer_size 1400; # passt gut zu 1500-Byte-Ethernet-MTU
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:50m;
ssl_session_tickets off; # Session-Tickets aus: bessere Forward Secrecy
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers off; # TLS 1.3 entscheidet der Client; aktueller Rat
ssl_stapling on;
ssl_stapling_verify on;
ssl_ecdh_curve X25519:P-384:P-256:P-521;
# OPTIMIERUNG 2: Lokalen Resolver (oder Quad9/Cloudflare) eintragen für besseren Datenschutz als Google
resolver 9.9.9.9 1.1.1.1 valid=300s;
resolver_timeout 5s;
add_header Strict-Transport-Security "max-age=31536000; includeSubdomains; preload";
add_header X-Xss-Protection "1; mode=block";
add_header X-Content-Type-Options nosniff;
add_header Referrer-Policy same-origin;
proxy_cookie_path / "/; HTTPOnly; Secure";
add_header Expect-CT "enforce, max-age=21600";
add_header Feature-Policy "payment none";
keepalive_timeout 70;
sendfile on;
client_max_body_size 0;
location / {
log_not_found off;
proxy_cache_valid 200 120m;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Scheme $scheme;
proxy_pass http://127.0.0.1:50510/;
}
}
Erster Start & erste Stacks
cd ~/dockge
docker compose up -d
docker compose logs -f dockge # bis keine Fehler mehr kommen
Danach https://stacks.meine.domain öffnen:
- Die Startseite zeigt vorhandene Stacks aus
/opt/stacks– ist der Ordner leer, erscheint ein leerer Bereich mit „Neuen Stack erstellen“. - Neuer Stack: Namen vergeben,
compose.yamlim Editor einfügen (z. B. eines unserer Tutorials) und auf Deploy klicken. - Vor dem Deploy: Preview/Validierung nutzen – Dockge prüft die Datei und zeigt dir Fehler, bevor irgendetwas startet.
- Logs und Terminal pro Stack findest du direkt in der Stack-Ansicht; mit dem Update-Button ziehst du neue Images (
pull+up -d).
Backups, Updates & Migration
Weil Dockge dateibasiert arbeitet, ist das Backup denkbar einfach: /opt/stacks
(alle Compose-Dateien und Stack-Daten) plus ./data (UI-Einstellungen). Ein Backup ist also
gleichzeitig die komplette Stack-Verwaltung.
docker compose pull && docker compose up -d im
Dockge-Ordner. Von Portainer migrieren? Stacks als Dateien nach /opt/stacks legen (bestehende
Compose-Dateien einfach verschieben) – Dockge übernimmt sie automatisch. Vorher Portainer-Backup ziehen, bis alles läuft.
Häufige Probleme (FAQ)
| Problem | Lösung |
|---|---|
| Vorhandene Stacks werden nicht angezeigt | Liegen die compose.yaml-Dateien wirklich als Unterordner unter dem gemounteten Pfad? Mount und DOCKGE_STACKS_DIR vergleichen. |
| „Compose-Datei wird am falschen Ort gespeichert“ | Host-Pfad und Container-Pfad des Stacks-Mounts sind nicht identisch – links === rechts setzen, keine relativen Pfade. |
| Editor meldet Fehler, CLI funktioniert aber | Die Validierung ist strenger (z. B. fehlende Quoting) – Meldung im Preview lesen; meist reicht ein Anführungszeichen. |
| Deploy schlägt fehl / keine Docker-Verbindung | docker.sock-Mount prüfen; der Socket-Zugriff wird für Deploy, Logs und Terminal benötigt. |
| Terminal / Live-Logs hängen | WebSocket-Upgrade im Proxy fehlt (Upgrade/Connection, proxy_http_version 1.1). |
| Zugriff ohne Login möglich | Erwartetes Verhalten – Dockge hat keine Nutzerverwaltung. Proxy-Auth (Basic Auth, Authelia …) oder VPN davorlegen. |
Fazit
Dockge füllt eine echte Lücke: eine schlanke Web-UI für Docker Compose, die dich nicht in eine eigene Datenbank einsperrt. Deine Stacks bleiben normale Dateien, der Editor validiert vor dem Deploy, Logs und Terminal sind einen Klick entfernt – und wer mag, bedient die Stacks weiterhin parallel per CLI.
/opt/stacks + ./data.
③ Keine eigene Auth – nur im LAN oder hinter Proxy-Login betreiben. ④ WebSockets im Proxy für Terminal & Logs.