OpenClaw Docker auf Mac-Cloud 2026: Exit 137/OOM, uid-1000-Volumenrechte, DNS und der kürzeste Pfad mit openclaw doctor

Betreiber, die OpenClaw in Docker auf Mac-Cloud-Knoten betreiben, sehen häufig Exit 137, „Permission denied“ auf gemounteten Konfigurationspfaden oder HTTPS, das auf dem Host funktioniert, im Container aber scheitert – und verbringen dann Tage mit Neuinstallationen von Images. Dieser Artikel sagt, für wen er gedacht ist (SREs und Einzelentwickler auf gemieteten Macs), was Sie gewinnen (eine geordnete Checkliste und Symptommatrix im Einklang mit offizieller Compose-Praxis 2026) und wie er aufgebaut ist: zuerst Speicher und cgroups, zweitens uid-1000-Volumes, drittens Docker-DNS, danach openclaw doctor, Port 18789 und wann Sie Container zugunsten von nativem macOS aufgeben sollten.

Diagramm: OpenClaw-Gateway in Docker auf einem Mac-Cloud-Host

In diesem Artikel

1. Bereitschafts-Triade: Prozess läuft, Port gemappt, Volume beschreibbar

Offizielle Docker- und Docker-Compose-Abläufe kapseln das OpenClaw-Gateway in einem Container. Der Mac-Cloud-Host behält Kontrolle über RAM und CPU-Kontingente, bind-mountet ~/.openclaw (oder ein benutzerdefiniertes Konfigurationsverzeichnis) und veröffentlicht 18789 oder einen anderen gemappten Port für Loopback-Checks oder SSH-Tunnel. Anders als ein Laptop auf dem Schreibtisch kommen Cloud-Macs oft mit begrenztem Speicher, häufig ohne GUI-Session und mit Images, die typischerweise als Nicht-root-Benutzer node mit uid/gid 1000 laufen. Solange diese Fakten nicht verinnerlicht sind, passieren die meisten Konfigurationsänderungen auf der falschen Schicht.

Definieren Sie Bereitschaft als drei Beobachtungen, die Sie in ein Ticket kopieren können: Der Container ist running oder healthy, docker compose ps zeigt die erwartete ports-Zuordnung, und Befehle wie openclaw status oder Ihre Health-Probe sind im Container ohne Berechtigungsfehler erfolgreich. Modell-Routing, Slack-Webhooks und Cron gehören erst danach. Typische Compose-Fehler sind Host-Pfade, die nicht existieren (Docker legt dann root-eigene Verzeichnisse an), read-only-Mounts, obwohl das Gateway Zustand persistieren muss, oder ein kleines Root-Volume, das mit Image-Layern und Build-Cache volläuft – Symptome, die wie zufällige Abstürze wirken, bis df -h die Wahrheit zeigt.

Notieren Sie Compose-Projektname, Servicenamen, veröffentlichte Ports und absolute Host-Pfade für Konfiguration und Workspace. Diese eine Zeile im Runbook spart Stunden, wenn Sie Upgrade-Guides, Webhook-Posts oder stilles Cron-Troubleshooting gegeneinander abgleichen: Alle sehen dieselbe Topologie statt zu raten, welche Maschine gemeint war.

2. Schmerzpunkte (nummeriert)

  1. Exit 137 und OOM: Docker mappt Linux-cgroup-Speicherlimits auf die Workload. Wenn der Kernel-OOM-Killer zuschlägt, meldet Docker oft Exit-Code 137 (128 + SIGKILL 9). Images ziehen oder bauen ist RAM-intensiver als stabiler Gateway-Traffic; ein Knoten, der „stundenlang läuft“, kann in Minuten bei docker compose build sterben. Erfassen Sie immer, ob 137 in der Build- oder Laufphase auftrat – die Behandlung unterscheidet sich.
  2. Volumenbesitz versus uid 1000: Legen Sie ~/.openclaw auf dem Host als root oder als persönlichen Benutzer an, kann der node-Prozess im Container openclaw.json, Logs oder Workspace-Dateien nicht schreiben. Der Fehler kann als stiller Start-Loop erscheinen, nicht als klarer Stacktrace, und wird oft fälschlich „schlechten Release Notes“ zugeschrieben.
  3. Docker-DNS und Firmen-Egress: Wenn curl https://api.anthropic.com auf dem Host klappt, docker exec … curl aber scheitert, fehlen dem Container fast immer korrekte DNS-Server, HTTP(S)_PROXY-Variablen oder Sicht auf den Trust Store hinter einem TLS-interceptierenden Proxy. API-Schlüssel zu rotieren, bevor der Netzwerkpfad stimmt, verschwendet Zeit und Kontingent.
  4. Health-Checks und Abhängigkeitsrennen: Aggressives depends_on ohne großzügige start_period flutet Logs mit „connection refused“, die wie Anwendungsfehler aussehen. Zeigen Sie, dass das Gateway lauscht, bevor nachgelagerte Dienste es bombardieren.

Zusammen erklären diese vier Muster den Großteil produktionsnaher Vorfälle, die wir bei Mac-Cloud-Mandanten sehen; die folgende Matrix verdichtet sie zu ersten Maßnahmen.

3. Symptom-zu-Ursachen-Matrix

Nutzen Sie die Tabelle als Entscheidungsblatt im Incident: Wählen Sie das nächstliegende Symptom und führen Sie die Spalte „Erste Maßnahmen“ aus, bevor Sie sekundäre Hypothesen verfolgen.

Beobachtbares SignalWahrscheinliche UrsacheErste Maßnahmen (geordnet)
Neustart-Schleife, OOMKilled, Exit 137cgroup- oder Host-SpeicherdruckSpeicher für Docker Desktop/Engine oder Compose-mem_limit erhöhen; konkurrierende RAM-lastige Jobs stoppen; Build mit weniger parallelen Layern wiederholen
Permission denied auf Konfigurations- oder Workspace-PfadenBind-Mount mit falscher uidAuf dem Host: sudo chown -R 1000:1000 /pfad/zum/mount; RW in Compose prüfen; mit docker exec -u node … touch Testdatei verifizieren
HTTPS- oder DNS-Fehler nur im ContainerResolver im Container oder fehlender Proxydocker exec, cat /etc/resolv.conf, curl -v; dns: in Compose oder daemon.json ergänzen; --env-file für Firmenproxies
Prozess läuft, Port von außen nicht erreichbarPort-Mapping, Bind-Adresse oder Cloud-Security-Groupports: mit beabsichtigtem 0.0.0.0 vs. 127.0.0.1 abgleichen; SG-Regel öffnen; SSH-Tunnel gemäß Härtungsleitfäden bevorzugen
openclaw doctor meldet fehlende Credentials, obwohl Compose sie „setzt“Umgebung erreicht den Container-Prozess nichtdocker exec … env | grep OPENCLAW gegen Compose-environment; Quoting und Vererbung korrigieren

4. Sechs geordnete Behebungsschritte (nicht leichtfertig umsortieren)

Die Reihenfolge zählt, weil spätere Schritte voraussetzen, dass frühere ganze Fehlerklassen ausgeschlossen haben. Direkt zu Image-Retags zu springen zerstört Beweise.

  1. Zustand erfassen: docker compose ps -a ausführen, dann docker logs <service> --tail 200. Festhalten, ob Exit 137 beim Image-Pull, Build oder im stabilen Betrieb auftrat.
  2. Speicher-Headroom prüfen: Weisen Sie Docker für Builds vorübergehend grob 4–8 GB zu (an Provider-Dokumentation anpassen). Auf dem Host memory_pressure oder Activity-Monitor-Äquivalente prüfen; starker Swap plus Gateway-Last ist ein Rezept für flaky SIGKILL.
  3. Volumenbesitz vereinheitlichen: chown auf jeden Bind-Pfad anwenden, in den der Container schreibt. Vor erneutem OpenClaw-Test einen trivialen Schreibtest als uid 1000 im Container wiederholen.
  4. Container-Netzwerk beweisen: Von innen den LLM-Provider mit curl -sI oder bei TLS-Zweifeln openssl s_client ansprechen. Bei firmeninternem MITM dieselben Trust-Materialien oder Proxy-Variablen spiegeln wie auf dem Host.
  5. Diagnose-CLI ausführen: openclaw doctor, openclaw status und openclaw models status (Namen je nach aktueller CLI) ausführen. Nur wenn doctor nach allem Obigen weiterhin rot mit Installationsfehlern meldet, Images neu installieren oder Tags wechseln.
  6. Abnahme auf Port 18789: curl -sI http://127.0.0.1:18789 (oder gemappter Port) vom Host; für Remote-Admins SSH-Tunnel oder Reverse-Proxy-Pfade gemäß Security-Artikeln prüfen.
docker compose ps -a docker logs openclaw-gateway-1 --tail 200 docker exec -it openclaw-gateway-1 sh -lc "id && ls -la /home/node/.openclaw && openclaw doctor"
Hinweis: Vermeiden Sie aggressives docker system prune -a während eines laufenden Incidents – es löscht Layer-Cache und Log-Kontext und verlängert die mittlere Reparaturzeit.

5. Zitierfähige technische Fakten (mindestens drei, wir listen sieben)

6. Schluss: Docker-Komfort versus natives macOS auf VPSMAC

Docker glänzt bei reproduzierbaren Demos und Mandanten-Isolation, aber jeder Namespace und jedes cgroup ist ein weiterer Hop, wenn nachts der Pager klingelt. Sie zahlen mit doppelter DNS-Konfiguration, uid-Gymnastik auf Volumes und erschwerter Korrelation zwischen Host-Swap-Druck und Container-Todesspiralen. Wenn Teams Images iterieren statt Mounts zu reparieren, entstehen „Schneeflocken“-Compose-Dateien, die niemand mehr anfassen will – kaum das Ergebnis, das Sie für ein 7×24-Agent-Gateway wünschen.

Native Installation auf einem Bare-Metal-Mac-Cloud-Knoten – per SSH einloggen, offiziellen Nicht-Container-Pfad ausführen, mit launchd überwachen – kollabiert mehrere Fehlerdomänen: Dieselbe uid wie in ssh schreibt die Konfiguration, Resolver-Einstellungen entsprechen Ihrer Shell, und openclaw doctor liest das Dateisystem, dem Sie ohnehin vertrauen. Für OpenClaw-Workloads, die sich wie Produktionsdienste statt wie Wegwerf-Labs verhalten, schlägt diese Reduktion beweglicher Teile meist das Quetschen in ein weiteres Custom-Image. Rein-Docker-Stacks erhöhen außerdem laufenden Troubleshooting-Aufwand und Leistungsschwankungen unter Dauerlast; dedizierte physische Mac-Hosts dämpfen beides.

Ein VPSMAC-Mac zu mieten ist daher der pragmatische nächste Schritt, sobald die Bereitschafts-Triade sich nicht stabilisieren lässt: Sie behalten Apple-Silicon-Kompatibilität und 24/7-Stromversorgung, ohne zusätzlich Container-Ergonomik gegen Cloud-Kontingente zu kämpfen. Kombinieren Sie den Knoten mit dem Five-Minute-Deploy-Artikel fürs Bootstrap und der Produktions-Härtungs-Checkliste für Exposition – dieselbe Toolchain, weniger Abstraktionssteuer. Das ist der Trade, den dieser Artikel empfiehlt, nachdem Sie die Matrix oben ehrlich ausgeschöpft haben: nicht als Slogan, sondern weil wiederholte 137- und Berechtigungsschleifen auf Schichtanzahl und nicht auf Modellqualität hindeuten.