Realtime-Attack-Map
SURICATA / LIVE FEED

Arcane - die freie Docker-Oberfläche im Test

Trivy-Scans, GitOps-Hooks und freies OIDC - Arcane bietet, wofür Portainer eine Lizenz verlangt.

Arcane - die freie Docker-Oberfläche im Test

Portainer hat sich über Jahre als Standard-Werkzeug für die grafische Docker-Verwaltung etabliert - inzwischen sitzen aber einige der praktischsten Funktionen hinter einer Lizenzgrenze. Mit Arcane ist ein junges, vollständig quelloffenes Projekt entstanden, das genau dort ansetzt und Funktionen wie Schwachstellen-Scans, GitOps-Hooks und OIDC-Single-Sign-On ohne Lizenzschlüssel mitbringt. Der folgende Artikel zeigt die Installation per Docker Compose, die Anbindung bestehender Projekte und die Funktionen, die im direkten Vergleich zu Portainer den Unterschied machen.

Warum überhaupt ein Wechsel von Portainer

Im Artikel zur Container-Verwaltung habe ich Portainer als bequemes Werkzeug vorgestellt, um Stacks, Container, Volumes und Netzwerke grafisch im Blick zu behalten. Für den reinen Überblick reicht die Community Edition (CE) nach wie vor aus.

Container Management
Mit Portainer den Überblick behalten.

Sobald es aber um Single-Sign-On per OIDC, granulares Rollen-basiertes Zugriffsmanagement (RBAC) oder einen vollwertigen GitOps-Workflow mit automatischen Updates geht, verweist Portainer konsequent auf die Business Edition - die zwar für kleine Setups bis drei Nodes kostenlos ist, aber einen Lizenzschlüssel voraussetzt und an die Knotenzahl gekoppelt bleibt.

Arcane verfolgt einen anderen Ansatz. Das Projekt steht unter der BSD-3-Clause-Lizenz auf GitHub, ist in Go und SvelteKit geschrieben und läuft als einzelner, schlanker Container. Mit über 5.900 Sternen auf GitHub hat sich bereits eine aktive Community gebildet, die regelmäßig zur Weiterentwicklung beiträgt.

Installation per Docker Compose

Arcane lässt sich, ganz im Stil der bisherigen Artikel-Reihe, problemlos in das bestehende /var/docker/admin/docker-compose.yml integrieren. Vorausgesetzt wird lediglich ein aktueller Docker-Daemon. Zunächst werden zwei Geheimnisse generiert, die Arcane für die Verschlüsselung der Datenbank und die Signierung von Sessions benötigt:

# M. Meister - Secrets für Arcane generieren
echo "ENCRYPTION_KEY=$(openssl rand -hex 32)"
echo "JWT_SECRET=$(openssl rand -hex 32)"

Die generierten Werte werden anschließend in folgendem Compose-Block hinterlegt:

services:
  arcane:
    image: ghcr.io/getarcaneapp/manager:latest
    container_name: arcane
    restart: unless-stopped
    ports:
      # Intern erreichbar, Zugriff von außen über den Reverse-Proxy
      - 127.0.0.1:3552:3552
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - arcane-data:/app/data
      # Bestehende Compose-Projekte, Pfad muss innen wie außen identisch sein:
      - /var/docker:/var/docker
    environment:
      - PUID=1000
      - PGID=1000
      - ENCRYPTION_KEY=<vorher generierter Wert>
      - JWT_SECRET=<vorher generierter Wert>
      - PROJECTS_DIRECTORY=/var/docker
    healthcheck:
      test: ['CMD', '/app/arcane', 'health']
      interval: 30s
      timeout: 5s
      retries: 3

volumes:
  arcane-data:

Die Variable PROJECTS_DIRECTORY ist der entscheidende Punkt für alle, die bereits eine gewachsene Compose-Struktur betreiben, wie sie in der Web-Service-Serie aufgebaut wurde. Damit Arcane bestehende Stacks korrekt erkennt und neu deployen kann, muss der Projektpfad innerhalb und außerhalb des Containers identisch sein - andernfalls löst Arcane Pfade falsch auf, sobald docker compose up ausgeführt wird. Nach docker compose up -d ist die Oberfläche unter http://[arcanehost]:3552 erreichbar, beim ersten Login mit arcane:arcane-admin wird sofort zum Setzen eines eigenen Passworts aufgefordert.

Funktionen, die Portainer CE fehlen

Der eigentliche Mehrwert von Arcane zeigt sich erst, wenn man tiefer in die Funktionsliste schaut. Vier Punkte sind für den produktiven Einsatz im Homelab oder bei Kunden besonders relevant.

Geplante Schwachstellen-Scans mit Trivy

Arcane kann Docker-Images auf einem Cron-Zeitplan automatisch auf bekannte CVEs scannen. Dazu startet Arcane einen langlebigen Hilfscontainer mit einer fest gepinnten Trivy-Version und führt die Scans per docker exec gegen jedes Image aus. Ergebnisse inklusive Schweregrad-Verteilung werden pro Image gespeichert und direkt in der Oberfläche angezeigt - standardmäßig täglich um Mitternacht, der Zeitplan lässt sich über ein 6-Felder-Cron-Format frei anpassen. Bei Portainer ist eine vergleichbare Integration nicht Teil der Community Edition.

Digest-basierte, Compose-fähige Auto-Updates

Wer bereits den Artikel zum automatischen Aktualisieren der Container gelesen hat, kennt das Prinzip von Watchtower. Arcane bringt diese Logik nativ mit, vergleicht dabei aber konsequent Image-Digests statt Tags - ein Vorgehen, das auch bei beweglichen Tags wie latest zuverlässig erkennt, ob sich tatsächlich etwas geändert hat.

Wie ich immer alle Internet-Dienste aktualisiert halte
Regelmäßige Updates sind entscheidend, um Sicherheitslücken zu schließen. Dieser Beitrag zeigt den Updateprozess meiner Docker- und Host-Systeme.

Gehört ein Container zu einem Compose-Projekt, gruppiert Arcane anstehende Updates projektweise, zieht nur die Images der betroffenen Services und startet auch nur diese neu - der Rest des Stacks bleibt unberührt. Updates lassen sich pro Container über das Label com.getarcaneapp.arcane.updater=false gezielt deaktivieren.

GitOps mit Pre-Deploy-Hooks

Über die GitOps-Lifecycle-Hooks kann vor jedem Deploy ein Skript aus dem synchronisierten Repository ausgeführt werden, etwa um Secrets zu entschlüsseln oder Konfigurationsdateien zu generieren. Das Skript läuft in einem eigenen, vom Administrator definierten Runner-Image und standardmäßig komplett ohne Netzwerkzugriff (network: none) - ein sinnvoller Kompromiss zwischen Automatisierung und Angriffsfläche. Bricht das Skript mit einem Fehlercode ab oder läuft in ein Timeout, stoppt Arcane das Deployment, bevor fehlerhafte Konfiguration live geht.

OIDC-Single-Sign-On ohne Lizenzschlüssel

Während bei Portainer die Anbindung an einen Identity-Provider wie Authentik oder Keycloak der Business Edition vorbehalten bleibt, ist OIDC-basiertes Single-Sign-On bei Arcane fester Bestandteil der freien Version - ein Punkt, der in mehreren unabhängigen Vergleichen als einer der Hauptgründe für den Wechsel genannt wird. Wer ohnehin bereits Authentik oder Keycloak im Netz betreibt, kann Arcane damit ohne Umweg über eine zweite Benutzerverwaltung anbinden.

Ergänzend liefert Arcane über getarcane.app/sbom eine Software Bill of Materials nach SPDX- und CycloneDX-Standard sowie signierte Release-Artefakte, was die Nachvollziehbarkeit der Lieferkette für sicherheitsbewusste Betreiber zusätzlich verbessert.

Den Docker-Socket absichern

Wie jedes Tool, das Container verwalten soll, benötigt auch Arcane Zugriff auf /var/run/docker.sock - und damit faktisch Root-Rechte auf dem Host. Wer das nicht direkt mounten möchte, kann stattdessen einen Socket-Proxy vorschalten, der nur die tatsächlich benötigten Docker-API-Endpunkte freigibt:

services:
  arcane-docker-proxy:
    image: tecnativa/docker-socket-proxy:latest
    container_name: arcane-docker-proxy
    privileged: true
    environment:
      - CONTAINERS=1
      - IMAGES=1
      - NETWORKS=1
      - VOLUMES=1
      - INFO=1
      - PING=1
      - VERSION=1
      - EVENTS=1
      - POST=1
      # Alles andere bleibt deaktiviert
      - EXEC=1
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro

  arcane:
    image: ghcr.io/getarcaneapp/manager:latest
    container_name: arcane
    restart: unless-stopped
    environment:
      - DOCKER_HOST=tcp://arcane-docker-proxy:2375
      - PUID=1000
      - PGID=1000
      - ENCRYPTION_KEY=<vorher generierter Wert>
      - JWT_SECRET=<vorher generierter Wert>
    volumes:
      - arcane-data:/app/data
      - /var/docker:/var/docker

volumes:
  arcane-data:

Diese Variante ist auch auf SELinux-gehärteten Systemen empfohlen, da der direkte Socket-Mount dort zusätzliche Label-Anpassungen erfordern würde. Im internen Netz, etwa hinter dem in früheren Artikeln beschriebenen OPNsense-Setup, ist der Aufwand optional, schadet als zusätzliche Schicht aber nie.

Benachrichtigungen

Ich nutze bekanntermaßen NTFY. Es werden jedoch auch andere Dienste unterstützt.

So erfährt man immer sofort, wenn es eine Sicherheitslücke gibt, oder ein Container sich ungesund verhält:

Fazit

Arcane ersetzt Portainer nicht in jedem Szenario, vor allem bei Kubernetes-Anbindung bleibt Portainer breiter aufgestellt. Für reine Docker- und Compose-Umgebungen liefert Arcane jedoch genau die Funktionen kostenlos mit, für die Portainer eine Lizenz verlangt - allen voran Schwachstellen-Scans, GitOps-Hooks und OIDC-Anbindung. Wer ohnehin Wert auf digitale Souveränität und einen schlanken, quelloffenen Stack legt, bekommt mit Arcane ein Werkzeug, das sich nahtlos in eine bestehende Compose-Struktur einfügt.