// Tutorial · Docker · Self-Hosting

Dockge selbst hosten: Compose-Stacks bequem per Web-UI

📅 04.09.2026 ⏱ 8 Min. Lesezeit ✍️ Redaktion

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.

Dateien bleiben Dateien: Ein per Dockge angelegter Stack ist ein normaler Ordner mit einer 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 eigener compose.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 -d bzw. 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 vorhandene compose.yaml-Unterordner automatisch.
Keine relative Pfade für das Stacks-Verzeichnis: Der Host-Pfad (links) und der Container-Pfad (rechts) müssen identisch und absolut sein. Dockge ersetzt den Pfad in den Dateien – bei Abweichungen können Compose-Dateien am falschen Ort landen.

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 über docker 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_DIR muss 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

ThemaErklärung
DOCKGE_STACKS_DIR=/opt/stacksPfad, 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 StackJeder Stack ist ein Unterordner mit compose.yaml (+ optional .env, eigene Daten). Vorhandene Ordner tauchen sofort in der UI auf.
Eigene AuthDockge bringt keine eigene Nutzerverwaltung mit – daher nur im lokalen Netz betreiben oder hinter einem Proxy mit Authentifizierung (Basic Auth, Authelia …).
Paralleler BetriebDockge und Portainer stören sich nicht – Dockge arbeitet rein dateibasiert und greift Portainer nicht ins Daten-Handwerk.
Erst einrichten, dann alles importieren: Vorhandene 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/;
        }

}
Ohne Auth nicht öffentlich machen: Dockge hat keine Login-Verwaltung – wer die URL kennt, verwaltet deine Stacks. Also entweder nur im VPN/LAN betreiben oder den Proxy mit einer Auth-Ebene (Basic Auth, Authelia, Cloudflare Access …) absichern.

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.yaml im 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.

Update wie gehabt: 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)

ProblemLösung
Vorhandene Stacks werden nicht angezeigtLiegen 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 aberDie Validierung ist strenger (z. B. fehlende Quoting) – Meldung im Preview lesen; meist reicht ein Anführungszeichen.
Deploy schlägt fehl / keine Docker-Verbindungdocker.sock-Mount prüfen; der Socket-Zugriff wird für Deploy, Logs und Terminal benötigt.
Terminal / Live-Logs hängenWebSocket-Upgrade im Proxy fehlt (Upgrade/Connection, proxy_http_version 1.1).
Zugriff ohne Login möglichErwartetes 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.

Die vier Merksätze: ① Stacks-Verzeichnis links === rechts und absolut (keine relativen Pfade). ② Dateien sind die Quelle der Wahrheit – Backup = /opt/stacks + ./data. ③ Keine eigene Auth – nur im LAN oder hinter Proxy-Login betreiben. ④ WebSockets im Proxy für Terminal & Logs.
📝
....

Wir betreiben unsere komplette Infrastruktur selbst auf Open-Source-Software und schreiben nur über Tools, die wir im Alltag wirklich einsetzen. Fragen zum Artikel? Schreib uns.