Teams, die eine Container-Isolierung für OpenClaw Gateway wünschen, sich aber an Upgrade-Abenden vor manuellen Bearbeitungspfaden fürchten, verzichten in der Regel auf Compose, benannte Volumes und Image-Digests. Dieser Artikel beschreibt einen reproduzierbaren Docker-Produktionspfad mit einer klaren Trennung vom lokalen Ubuntu 24.04 + systemd + Tunnel-Bare-Metal-Leitfaden: Baselines, docker-compose.yml-Form, persistente Volumes, Image-Upgrades und Integritätsprüfungen sowie eine Symptomtabelle für häufige Containerfehler.
Der Bare-Metal-Pfad minimiert die Abstraktion: Prozesse auf dem Host, Systemd für Neustarts, Tunnel für öffentlichen Eingang. Der Docker-Pfad tauscht das Artefakt von „Verzeichnissen + Unit-Dateien“ zu „Bilder + Compose“ aus: Bei Upgrades handelt es sich hauptsächlich um das Abrufen neuer Digests, das Neuerstellen von Containern und das Überprüfen, dass die Mounts noch in einer Reihe stehen. Beide können das Gateway mit TLS am Rand im Loopback halten; Die Abzweigung besteht darin, ob Sie die Bildlieferkette und die Volumenverwaltung im Austausch für Reproduzierbarkeit und feinere Rollbacks akzeptieren.
Wenn Sie Register, Scans und SBOMs bereits standardisieren, ist Compose oft die Produktionsform mit der geringsten Reibung. Ein einzelner VPS mit geringer Abwanderung kann auf dem Papier mit systemd allein immer noch günstiger sein. Die folgenden sechs Schmerzpunkte stammen aus echten Triage-Threads – sie sagen Ihnen, ob Sie für Container bereit sind.
Behandelnlatestals Versionierung:Pin-Digest oder unveränderliche Build-Tags in der Produktion; andernfalls wird „es hat letzte Nacht funktioniert“ keiner Dateisystemebene zugeordnet.
Konfiguration in Bilder umwandeln:Verwenden Sie Env, Secrets oder schreibgeschützte Mounts. andernfalls erzwingt jede Token-Rotation einen Neuaufbau und verhindert die Containerlieferung.
Anonyme Volumes, die Festplatten füllen:Unbenannte Cache-Volumes aus Experimenten werden stillschweigend verbraucht/var/lib/docker; bevorzugen benannte Volumes oder externen Objektspeicher.
Gesundheitsprüfungen, die immer 200 zurückgeben:Die Prüfung nur des HTTP-Ports ohne Modell-/Konfigurationsbereitschaft führt nach Verkehrsverschiebungen zu Massen-502-Fehlern.
Unterschiedliche Compose- und Tunnel-Konfigurationen:Der Eingang, der immer noch auf einen alten veröffentlichten Port verweist, führt dazu, dass externe Symptome nichts mit Containerprotokollen zu tun haben.
macOS-Workloads in Linux-Container erzwingen:Das Gleiche gilt für den Bare-Metal-Artikel: Xcode-/Simulator-Jobs gehören zu Remote-Mac-Ausführern, nicht zu „magischen Sandbox“-Linux.
Wenn Sie antworten können: „Woher kommen die Bilder, welche Datenträger werden gespeichert, wem gehören Upgrades?“, fahren Sie mit den Baselines und Vorlagen fort. Wenn nicht, schreiben Sie einen One-Pager in der Inszenierung, bevor Sie mit der Produktion in Berührung kommen.
Wenn Sie beide Pfade ausführen, teilen Sie sich einen Listen- und Tunneltopologievertrag: Ordnen Sie Container 127.0.0.1 auf dem Host-Loopback zu und beenden Sie TLS bei Cloudflared oder einem gleichwertigen System. Bei der Migration von systemd → Compose wird dann nur der Prozess-Supervisor ausgetauscht, nicht die Sicherheitsgrenze.
Wenn Sie sowohl Installationsskripte als auch ein Compose-Repository verwalten, deklarieren Sie eine einzige Quelle der Wahrheit – entweder ist Compose kanonisch und CI rendert Systemd-Snippets für seltene Bare-Metal-Fälle oder umgekehrt. Dual-Track-Drift zeigt sich normalerweise dadurch, dass Ports, Volume-Namen und Umgebungspfade nur auf einer Seite geändert werden.
Container erleichtern die Hölle der Abhängigkeiten, machen aber keine geheimen Rotations- oder Audit-Anforderungen überflüssig. Env_file als Safe ohne Berechtigungen und Rotation zu behandeln, ist moralisch dasselbe wie das Übertragen von Token – nur mit einem verzögerten Vorfalldatum.
Überprüfen Sie „Installationsminuten“ neben „Kosten pro vierteljährlichem Upgrade“: Container kosten im Voraus mehr, lassen sich aber besser wiederholen. Ersetzen Sie Platzhalternamen/Ports durch Ihre tatsächlichen Werte.
| Dimension | Gateway auf öffentlicher IP | systemd + Loopback + Tunnel (Bare Metal) | Docker Compose-Produktion |
|---|---|---|---|
| Liefereinheit | Handgerollte Verzeichnisse/Skripte | Einheit + Konfigurationsdateien | Bildauszug + Datei erstellen |
| Upgrade-Pfad | Hohe Drift | Binär/config ersetzen, systemctl rollen | Image abrufen, Container neu erstellen, Volumes überprüfen |
| Isolierung | Schwach | Mittel (Benutzer/Berechtigungen) | Stärker (Namespaces/Cgroups – keine vollständigen VMs) |
| Beobachtbarkeit | DIY | Journald ist klar | Vereinheitlichen Sie Docker-Protokolle oder Sidecar-Agenten |
| Typische Kosten | Höchstes Sicherheitsrisiko | Moderate Skripterstellung | Bildlieferkette + Volumenoperationen |
Compose deklariert Laufzeit + Persistenz + Abhängigkeitskanten; Wenn Sie sich weigern, Volumes und Tags zu benennen, verschieben Sie das Chaos nur, bis die Festplattenwarnung ausgelöst wird.
Installieren Sie unter Ubuntu 24.04 LTS oder ähnlichem die unterstützte Docker Engine und das Compose v2-Plugin (docker compose) und vermeiden Sie dabei die veraltete eigenständige Docker-Compose-Binärdatei, die CI von prod unterscheidet. Budgetieren Sie RAM über das Gateway hinaus für Protokolle, temporäres Entpacken und gleichzeitige Verbindungen. Beobachten Sie das Wachstum von /var/lib/docker separat.
Die Sicherheit entspricht dem Bare-Metal-Artikel: keine öffentlichen Listener für App-Ports, nur SSH-Schlüssel, standardmäßig verweigernde Firewall. Container fügen Namespaces hinzu – sie implementieren TLS oder Zugriffsrichtlinien nicht auf magische Weise.
Pin-Versionen:erfassendocker versionUnddocker compose versionim Runbook; Ausrichtung der Staging-/Prod-Minderjährigen.
Protokolltreiber + Rotation:mit Standard-JSON-Dateisatzmax-size/max-fileDaher kann ein gesprächiger Container die Festplatte nicht füllen.
Dediziertes Netzwerk:Deklarieren Sie in Compose eine benutzerdefinierte Bridge, sodass standardmäßig nur das Gateway und der Tunnel-Sidecar kommunizieren.
Registrierungsdisziplin:Dokumentenregister, Bildname, Digest; Prod-Pulls sollten dieselbe Registry verwenden, die Sie getestet haben – vermeiden Sie docker.io in dev und private Registry in prod ohne Tracking.
Volumen-/Bindungsstrategie:schreibgeschützte Konfigurations-Mounts, beschreibbare Volumes nur für Laufzeit/Cache, Geheimnisse als Modus-400-Dateien oder Docker-Geheimnisse.
Abwärts/aufwärts proben:im Staging-Laufdocker compose downDannup -d; Bestätigen Sie, dass die Volumes überleben und der Upstream-Tunnel weiterhin auf den richtigen Loopback-Port zielt.
Notiz:Echte OpenClaw-Image-Namen, Env-Schlüssel und CLI-Flags folgen den Originaldokumenten – die YAML unten dient der Veranschaulichung; Ersetzen Sie Platzhalter und löschen Sie nicht verwendete Schlüssel vor der Produktion.
Veröffentlichen Sie mit 127.0.0.1:host:container, damit der Host-Loopback den Tunnel speist – derselbe Vertrag wie „Nur Loopback binden“ im Bare-Metal-Leitfaden. Gesundheitsprüfungen sollten die HTTP-Bereitschaft nachweisen; Wenn der Upstream einen Befehl zur Konfigurationsvalidierung ausliefert, erweitern Sie start_period, damit neue Container nicht während des Bootens beendet werden.
services:
openclaw-gateway:
image: ghcr.io/example/openclaw-gateway@sha256:<DIGEST>
restart: unless-stopped
env_file:
- ./gateway.env
volumes:
- openclaw_data:/var/lib/openclaw
- ./gateway.yaml:/etc/openclaw/gateway.yaml:ro
ports:
- "127.0.0.1:8787:8787"
healthcheck:
test: ["CMD", "curl", "-fsS", "http://127.0.0.1:8787/health"]
interval: 30s
timeout: 5s
retries: 3
start_period: 40s
volumes:
openclaw_data:
Upgrade-Reihenfolge: ① Docker Compose Pull im Staging, um Digest zu überprüfen; ② Sichern Sie die Daten des benannten Volumes oder exportieren Sie die Konfiguration. ③ prod docker compose up -d --no-deps --build (löschen Sie --build, wenn es nicht verwendet wird) und überwachen Sie den Zustand; ④ Locken vom Host und durch den Tunnel; ⑤ Erwägen Sie erst dann die Bereinigung des Docker-Images (gefährlich, wenn Sie noch Rollback-Ebenen benötigen).
Triage-Stack: Containerprotokolle für Konfiguration/Berechtigungen; host ss -tlnp für Loopback-Bindung; Tunneleingang für den richtigen Port. Wenn das Internet 502 sieht, Curl 127.0.0.1 aber funktioniert, vermuten Sie Routing – nicht zuerst das Image.
Führen Sie für Blau/Grün kurz zwei Compose-Projekte aus (verschiedene Projektnamen und Loopback-Ports) und verschieben Sie die Gewichtungen am Tunnel oder im internen LB. Dann docker compose -p old_project down oder alte Container behalten Volume-Sperren und Hintergrundarbeit.
Wenn das Gateway einen Host-Unix-Socket oder ein lokales Modell-Sidecar erreichen muss, überprüfen Sie network_mode: host – es umgeht einen Teil der Port-Map-Isolation und sollte eine von zwei Personen überprüfte Änderung sein.
Warnung:niemals festlegengateway.envmit API-Schlüsseln; CI darf gerenderte Compose-Umgebung nicht drucken. Eine falsche Volume-UID/GID zeigt sich oft als ungenaue Zustandsprüfung und nicht als sofortiger Absturz.
Nutzen Sie diese, um sich an der Plattform „Container sind kein kostenloses Mittagessen“ zu orientieren. Ersetzen Sie es durch Ihre P95-Metriken und Scheibenkurven.
Warnung bei Neustartanzahl, fehlerhafter Dauer und Volume-Nutzung – nicht nur bei der CPU. Dienste im Gateway-Stil kommen oft erst dann zum Einsatz, wenn die Festplatten- oder Dateideskriptoren erschöpft sind.
/var/lib/docker; pair alerts with volume backup policy.start_period is a common starting point.Linux-Container passen zu OpenClaw-Gateways, Warteschlangen und leichter Orchestrierung, aber Xcode, Simulatoren und Apple Silicon-Funktionen stoßen an ihre Grenzen – zahlen Sie ewig für Kompatibilitäts-Shims oder verlagern Sie die Ausführung auf dedizierte Macs. Im Vergleich zum Betrieb von Gateways auf Laptops oder „temporären“ Hosts, auf denen Ruhezustand, Updates und Eingabeaufforderungen die Automatisierung unterbrechen, richten vertraglich vereinbarte dedizierte Remote-Macs langlebige Apple-Workloads aus, während Linux Docker oder systemd für die Steuerungsebene behält – Fehlerdomänen bleiben sauber. Für stabile Agenten und Build-Pipelines ist die Miete eines NodeMini Cloud Mac Mini normalerweise die bessere Lösung: Behalten Sie das Gateway in einem VPS-Container und verlagern Sie schwere Arbeit an bestellbare Ausführungsknoten, anstatt die falsche Ebene zu patchen.
Ja – aufgeteilt nach Umgebung (Staging Compose, Prod Systemd) oder nach Dienst. Teilen Sie den Listen+Tunnel-Vertrag, damit nie zwei Gateways um denselben Loopback-Port kämpfen. Weitere OpenClaw-Beiträge:Kategoriefilter.
Überprüfendocker logsund ob der Gesundheitsbefehl immer noch mit den neuen Bildpfaden übereinstimmt; Überprüfen Sie die Volume-Berechtigungen und die Umgebung. Weitere Informationen finden Sie hierMietpreisefür Remote-Mac-Knoten.
Durchsuchen Sie dieHilfecenterfür SSH/VNC und Netzwerk. Überprüfen Sie für Container-Netzwerke auch die Host-Firewall-Regeln unddocker network.