Symptom: SSH funktioniert, aber docker ps meldet „Cannot connect to the Docker daemon“ oder der Docker Socket fehlt. Schnellste Lösung: Installieren Sie Docker Desktop nicht sofort neu. Prüfen Sie zuerst Anwendung, macOS-Benutzersitzung, Docker Context und Socket getrennt voneinander; führen Sie die erste Autorisierung bei Bedarf über VNC mit demselben Benutzerkonto durch.

Diese Anleitung passt zu Ihnen, wenn Sie von einem Windows- oder Linux-Rechner per SSH einen entfernten Mac für Container-Entwicklung verwenden, einen macOS-Build-Knoten betreiben oder nach einem Neustart die Wiederherstellung von Docker prüfen müssen. Sie hilft außerdem bei der Entscheidung, ob Ihr bestehender Remote-Mac für unbeaufsichtigte Build- und Testaufgaben geeignet ist.

Fehlerbild sauber eingrenzen

Ein erfolgreicher SSH-Login beweist nur, dass macOS Remote Login und das Benutzerkonto erreichbar sind. Er beweist nicht, dass Docker Desktop gestartet wurde, dass der Linux-Daemon läuft oder dass Ihre Shell den richtigen Docker Socket verwendet. Für die Diagnose müssen Sie deshalb vier Ebenen auseinanderhalten.

<
BeobachtungWahrscheinliche EbeneErster NachweisNächste Aktion
docker: command not foundCLI oder PATHcommand -v docker und echo "$PATH"CLI-Pfad des aktuellen Benutzers korrigieren
Docker-Befehl ist vorhanden, aber Daemon nicht erreichbarDocker Desktop oder Backenddocker desktop status, Prozessliste, LogsAnwendung starten und Backend-Logs prüfen
Docker läuft, aber falscher Socket oder falscher ContextBenutzerumgebungdocker context show, docker context inspectBenutzer, Context und Socket-Pfad angleichen
Container startet, Dienst ist aber nicht erreichbarNetzwerk, Port oder Anwendungdocker ps, docker port, curl vom richtigen HostPortbindung, Firewall und Dienst-Logs prüfen
Beginnen Sie mit Befehlen, die keine Konfiguration verändern:
whoami
echo "$HOME"
command -v docker
docker version
docker context show
docker context ls
docker desktop status

Wenn docker desktop status nicht verfügbar ist, fehlt möglicherweise das aktuelle Desktop-CLI-Plugin oder die installierte Version stellt diesen Unterbefehl noch nicht bereit. Die offizielle Referenz führt start, stop, restart, status, logs und diagnose als Desktop-CLI-Funktionen auf. Prüfen Sie daher zunächst die installierte Version, statt einen fremden Diagnosepfad aus einem alten Skript zu übernehmen: Docker Desktop CLI und verfügbare Unterbefehle.

Warum erreicht eine SSH-Sitzung den Docker-Daemon nicht? Typisch ist eine Trennung zwischen „SSH ist aktiv“ und „Docker Desktop läuft in der grafischen Benutzer-Sitzung“. Zusätzlich kann die SSH-Shell ein anderes HOME, einen anderen PATH, einen anderen Docker Context oder eine andere DOCKER_HOST-Variable verwenden. Die Fehlermeldung sieht dann wie ein Daemon-Problem aus, obwohl nur die Client-Konfiguration abweicht.

Prüfen Sie deshalb auch:

env | grep -E '^(DOCKER_HOST|DOCKER_CONTEXT|PATH|HOME)='
ls -la "$HOME/.docker/run/docker.sock"
stat "$HOME/.docker/run/docker.sock" 2>/dev/null

Ein vorhandener Socket allein beweist noch nicht, dass der Daemon gesund ist. Erst docker version mit einem erreichbaren Server-Abschnitt und ein kleiner Testcontainer liefern einen belastbaren Funktionsnachweis.

Installation und macOS-Kompatibilität prüfen

Eine Neuinstallation ist erst dann gerechtfertigt, wenn die Belege auf eine beschädigte oder unvollständige Installation zeigen. Prüfen Sie vorher die drei häufigsten Installationsfehler:

  1. Die Anwendung liegt nicht am erwarteten Ort.
  2. Die CLI-Symlinks sind für den SSH-Benutzer nicht im PATH.
  3. Die Version oder Architektur passt nicht zur macOS-Umgebung.
Die Standardinstallation legt die Anwendung unter /Applications/Docker.app ab. Die CLI kann je nach Installationsart in /usr/local/bin oder im benutzerspezifischen Verzeichnis $HOME/.docker/bin liegen. Wenn der zweite Pfad verwendet wird, muss er in der Shell-Umgebung des SSH-Benutzers enthalten sein. Die offiziellen Installationshinweise beschreiben außerdem, dass Docker Desktop aktuell macOS-Versionen unterstützt, die der derzeitigen Hauptversion sowie den zwei vorherigen Hauptversionen entsprechen, und mindestens 4 GB Arbeitsspeicher voraussetzt. Diese Angaben können sich mit neuen macOS- und Docker-Versionen ändern; prüfen Sie sie vor jeder Aktualisierung in der [offiziellen Installationsdokumentation für Mac](https://docs.docker.com/desktop/setup/install/mac-install/).
ls -ld /Applications/Docker.app
ls -l /usr/local/bin/docker "$HOME/.docker/bin/docker" 2>/dev/null
uname -m
sw_vers
docker --version
docker desktop version 2>/dev/null

Auf einem Apple-Silicon-Mac erwarten Sie bei uname -m typischerweise arm64; ein Intel-Mac meldet x86_64. Diese Ausgabe ist kein vollständiger Kompatibilitätstest, verhindert aber, dass Sie versehentlich ein falsches Installationspaket oder eine unpassende Build-Architektur untersuchen.

Wenn Docker Desktop nach einem Update nicht startet, vergleichen Sie den Fehler mit den aktuellen offiziellen Versionshinweisen und bekannten Problemen. Verwenden Sie keine Community-Anleitung, die pauschal Systemdateien löscht. Besonders riskant sind Befehle, die das Docker-Datenverzeichnis, virtuelle Festplatten oder Credential-Konfigurationen entfernen.

Benutzersitzung und Erstautorisierung

Docker Desktop ist auf macOS nicht einfach ein systemweiter Linux-Daemon, der unabhängig vom Benutzerkonto im Hintergrund läuft. Die Anwendung verwendet eine macOS-Benutzersitzung, Hilfsprozesse und gegebenenfalls privilegierte Komponenten. Der erste Start kann daher eine grafische Bestätigung, eine Passwortabfrage oder die Übernahme von Einstellungen verlangen.

Für einen Remote-Mac bedeutet das: Starten Sie Docker Desktop bei der Ersteinrichtung oder nach einer sicherheitsrelevanten Änderung zunächst über VNC in genau dem Benutzerkonto, das später per SSH und in den Automatisierungsskripten verwendet wird. Apple beschreibt Remote Login als SSH- beziehungsweise SFTP-Zugang; dieser Zugang ist von der grafischen Bildschirmfreigabe getrennt. Die jeweiligen Konten und Freigaben müssen daher bewusst abgeglichen werden: Apple-Dokumentation zu Remote Login und SSH.

Gehen Sie bei der Initialisierung so vor:

  1. Melden Sie sich über VNC an dem macOS-Benutzer an, der Docker später ausführen soll.
  2. Starten Sie /Applications/Docker.app.
  3. Bearbeiten Sie die angeforderten Berechtigungen und Einstellungen in der grafischen Oberfläche.
  4. Warten Sie, bis das Docker-Menü beziehungsweise die Desktop-Oberfläche einen betriebsbereiten Zustand anzeigt.
  5. Öffnen Sie danach eine neue SSH-Sitzung mit demselben Benutzernamen.
  6. Prüfen Sie docker desktop status, docker version und einen Testcontainer.
Die Option „Docker Desktop beim Anmelden starten“ ist dabei nicht mit einem vollständig unabhängigen Systemdienst gleichzusetzen. Benutzerbezogene Hintergrundprozesse werden unter macOS über launchd organisiert; Apple unterscheidet dabei ausdrücklich zwischen systemweiten Daemons und Benutzer-Agenten, die an eine eingeloggte Benutzersitzung gebunden sein können. Lesen Sie dazu die [Apple-Dokumentation zu LaunchDaemons und LaunchAgents](https://developer.apple.com/library/archive/documentation/MacOSX/Conceptual/BPSystemStartup/Chapters/CreatingLaunchdJobs.html).

Kann Docker Desktop auf einem Remote-Mac ohne grafische Oberfläche starten? Ein SSH-Aufruf kann den Start auslösen, wenn Docker Desktop bereits korrekt eingerichtet ist und die benötigte Benutzerumgebung vorhanden ist. Sie sollten jedoch nicht voraussetzen, dass die erste Autorisierung oder jede sicherheitsrelevante Bestätigung rein über SSH funktioniert. Wenn die Anwendung nach einem Neustart auf eine grafische Freigabe wartet, benötigen Sie VNC oder eine vergleichbare Bildschirmzugriffsmöglichkeit.

Docker Context und Docker Socket angleichen

Der häufigste Fehler nach dem Wechsel von Benutzerkonten oder nach manuellen Reparaturen ist ein auseinanderlaufender Pfad zwischen CLI und Docker Desktop. Docker Desktop verwendet auf macOS einen benutzerspezifischen Socket unter dem Home-Verzeichnis. Optional kann zusätzlich /var/run/docker.sock angelegt werden. Laut offizieller Dokumentation wird dieser Symlink nach einem Neustart nur dann automatisch wiederhergestellt, wenn die entsprechende Einstellung aktiviert und der zugehörige Startmechanismus eingerichtet wurde. Die relevanten Pfade und Berechtigungsgrenzen sind in den offiziellen macOS-Berechtigungshinweisen beschrieben.

Prüfen Sie den aktiven Context:

docker context show
docker context ls
docker context inspect "$(docker context show)"

Untersuchen Sie anschließend den Socket-Pfad, ohne eine beliebige Socket-Datei zu erzeugen:

docker context inspect desktop-linux
ls -la "$HOME/.docker/run"
ls -la /var/run/docker.sock 2>/dev/null

Wenn der aktive Context auf einen nicht mehr gültigen Endpunkt zeigt, korrigieren Sie nicht blind die Datei unter ~/.docker/config.json. Sichern Sie sie zuerst:

cp "$HOME/.docker/config.json" "$HOME/.docker/config.json.backup"

Danach können Sie den vorgesehenen Desktop-Context erneut auswählen, sofern er vorhanden ist:

docker context use desktop-linux
docker version

Verwenden Sie sudo docker ... nicht als Standardreparatur. sudo kann den Benutzer, das Home-Verzeichnis, die Docker-Konfiguration und damit den Context wechseln. Ein scheinbar erfolgreicher Befehl als root kann anschließend verschleiern, dass Ihre normalen Build-Skripte weiterhin auf einen anderen Socket zugreifen.

Was tun, wenn der Docker Socket nach einem Neustart fehlt? Ermitteln Sie zuerst, ob nur /var/run/docker.sock fehlt oder ob auch $HOME/.docker/run/docker.sock nicht vorhanden ist. Fehlt nur der systemweite Symlink, prüfen Sie die Einstellung für den Standard-Socket in Docker Desktop. Fehlt auch der benutzerspezifische Socket, ist Docker Desktop wahrscheinlich nicht vollständig gestartet oder die betreffende Benutzersitzung wurde nicht initialisiert. Erzeugen Sie keinen leeren Socket und verlinken Sie nicht auf einen geratenen Pfad; das würde den Fehler nur verdecken.

Rechte, Hilfsprozesse und Netzwerkzugriff

„Permission denied“ hat auf einem Remote-Mac mehrere mögliche Ursachen. Sie sollten mindestens diese Fälle trennen:

  • Der Benutzer darf die CLI-Datei nicht ausführen oder findet sie nicht.
  • Die Installation benötigt eine privilegierte Bestätigung für Symlinks oder Ports.
  • Ein Hilfsprozess wurde nicht korrekt eingerichtet.
  • Ein privates Registry-Konto ist in einer anderen Keychain oder Benutzerumgebung gespeichert.
  • Ein Container versucht, einen privilegierten Host-Port zu verwenden.
  • Ein Proxy oder eine Firewall verhindert den Registry- oder Anwendungszugriff.
Docker Desktop läuft grundsätzlich als nicht privilegierter macOS-Benutzer. Für einzelne Funktionen, etwa bestimmte Symlinks, privilegierte Ports oder den privilegierten Hilfsprozess, kann jedoch eine Autorisierung erforderlich sein. Der interne Backend-Hilfssocket und der privilegierte Socket haben unterschiedliche Aufgaben; behandeln Sie sie nicht als austauschbare Docker Socket-Dateien. Die Details stehen in der [Dokumentation zum Berechtigungsmodell unter macOS](https://docs.docker.com/desktop/setup/install/mac-permission-requirements/).

Prüfen Sie zunächst Anwendung und Backend:

ps aux | grep -E '[D]ocker|[c]om.docker.backend|[v]mnetd'
docker desktop status
docker desktop logs --tail 200

Falls die Desktop-CLI logs nicht anbietet, verwenden Sie die macOS-Protokollierung oder die Docker-Desktop-Logdateien. Für den Daemon nennt die offizielle Dokumentation unter macOS insbesondere:

~/Library/Containers/com.docker.docker/Data/log/vm/init.log

Sie können die letzten Einträge beispielsweise so untersuchen:

tail -n 100 "$HOME/Library/Containers/com.docker.docker/Data/log/vm/init.log"

Bei einer Diagnose mit Upload müssen Sie Datenschutz und DSGVO berücksichtigen. Diagnosepakete können Benutzernamen, IP-Adressen und andere personenbezogene Informationen enthalten. Sammeln Sie sie nur nach Ihrer internen Freigabe und prüfen Sie vor einer Weitergabe, welche Daten enthalten sind. Hinweise zu Diagnoseumfang und Datenschutz finden Sie in der offiziellen Docker-Supportdokumentation.

Für private Registries verwenden Sie keine Tokens direkt in Shell-Historien, Skripten oder Beispielbefehlen. Prüfen Sie, ob der SSH-Benutzer dieselbe Credential-Umgebung wie die VNC-Sitzung verwendet, und melden Sie sich bei Bedarf interaktiv oder über einen sicheren Secret-Mechanismus erneut an. Testen Sie danach mit einem kleinen, bekannten Image. So unterscheiden Sie Registry-Authentifizierung von einem allgemeinen Desktop- oder Netzwerkfehler.

Neustart und Container-Wiederherstellung

Ein Remote-Mac ist erst dann als langfristiger Build- oder Testknoten geeignet, wenn Sie die Wiederherstellung nach einem echten Neustart nachweisen können. Ein einzelner manueller Start über VNC genügt dafür nicht.

Führen Sie diesen Ablauf in einer Wartungszeit durch:

  1. Erfassen Sie vor dem Neustart Benutzerkonto, docker context show, Socket-Pfad und laufende Container.
  2. Prüfen Sie, welche Container über eine Restart-Policy verfügen und welche absichtlich manuell gestartet werden.
  3. Starten Sie den Mac kontrolliert neu und warten Sie, bis SSH wieder erreichbar ist.
  4. Melden Sie sich per SSH mit demselben macOS-Benutzer an.
  5. Prüfen Sie docker desktop status, docker version, Context und Socket.
  6. Starten Sie einen kleinen Testcontainer mit einer klaren, lokalen Prüfung.
  7. Kontrollieren Sie danach die geschäftskritischen Container, Ports, Volumes und Logs.
  8. Dokumentieren Sie jede notwendige VNC-Aktion, erneute Autorisierung oder manuelle Korrektur.
Beispiel für die Funktionsprüfung:
docker desktop status
docker context show
docker version
docker run --rm hello-world
docker ps --format 'table {{.Names}}\t{{.Status}}\t{{.Ports}}'

Die Prüfungen sollten nicht nur „Container läuft“ bestätigen. Ein Container kann zwar starten, aber wegen eines falschen Port-Mappings, eines fehlenden Volumes oder einer nicht erreichbaren Registry unbrauchbar sein. Testen Sie daher den konkreten Dienstpfad, den Ihre CI/CD-Aufgabe benötigt.

Wie lässt sich die Langzeitfähigkeit eines Remote-Mac prüfen? Bewerten Sie nicht nur die Erfolgsquote einzelner Starts, sondern die Zahl der manuellen Eingriffe nach Neustarts, Updates und Sitzungswechseln. Wenn jedes Wiederanlaufen eine VNC-Anmeldung oder eine Berechtigungsbestätigung erfordert, ist der Knoten für vollständig unbeaufsichtigte Aufgaben nur eingeschränkt geeignet. Für geplante Builds kann er dennoch funktionieren, sofern Sie diese Grenze in den Betriebsprozess aufnehmen.

Wiederanlauf-Checkliste

  • [ ] SSH Remote Login ist nach dem Neustart erreichbar.
  • [ ] Der vorgesehene macOS-Benutzer ist derselbe wie bei der Docker-Initialisierung.
  • [ ] docker wird ohne sudo gefunden.
  • [ ] docker desktop status meldet einen betriebsbereiten Zustand.
  • [ ] docker context show zeigt den vorgesehenen Desktop-Context.
  • [ ] Der Context verweist auf den erwarteten benutzerspezifischen Socket.
  • [ ] docker version liefert sowohl Client- als auch Serverinformationen.
  • [ ] Ein Testcontainer startet und beendet sich erfolgreich.
  • [ ] Ein realer Build- oder Testcontainer kann Images, Volumes und Ports verwenden.
  • [ ] Kein Registry-Token liegt ungeschützt in Shell-Historie oder Repository-Dateien.
  • [ ] Die Wiederherstellung funktioniert ohne nicht dokumentierte manuelle VNC-Schritte.
  • [ ] Falls VNC erforderlich ist, ist dieser Eingriff als Betriebsgrenze dokumentiert.

Entscheidung für den weiteren Betrieb

Wenn die Diagnose ein fehlendes CLI, einen falschen Context oder einen nicht aktivierten Socket zeigt, ist eine Neuinstallation meist nicht der erste sinnvolle Schritt. Sichern Sie die Konfiguration, korrigieren Sie nur die betroffene Ebene und wiederholen Sie den Neustarttest. Erst wenn Anwendung, Pfade, Berechtigungen und Logs gemeinsam auf eine beschädigte Installation zeigen, kommt eine Reparatur oder Neuinstallation infrage.

Für ein dauerhaftes macOS-Containerziel sollten Sie außerdem den Unterschied zwischen „Docker Desktop startet gelegentlich“ und „der Knoten ist betriebssicher“ ernst nehmen. Die Desktop-Anwendung benötigt eine andere Betriebsbetrachtung als ein rein systemweiter Linux-Daemon: Benutzersitzung, grafische Autorisierung, Keychain, Socket-Erzeugung und Update-Verhalten gehören in Ihre Runbooks.

Wenn Ihr aktueller Mac nach jedem Neustart manuelle Anmeldung, Socket-Reparatur oder wechselnde Benutzerkonten benötigt, entstehen nicht nur Wartezeiten. Sie riskieren verpasste Builds, unvollständige Testläufe und schwer reproduzierbare Berechtigungsfehler. Ein gemieteter echter Mac mit klar dokumentiertem VNC-, SSH- und Wiederanlaufzugang kann in diesem Fall für zeitlich begrenzte Entwicklungs- oder Testumgebungen die bessere Option sein. Prüfen Sie dafür zunächst die verfügbaren Mac-Optionen von MACGPU und vergleichen Sie sie mit Ihrer bestehenden Knoten-Checkliste, statt allein nach CPU- oder Arbeitsspeicherangaben zu entscheiden.

Wenn Sie eine Apple-Silicon-Umgebung für Builds benötigen, können Sie außerdem die passende M4-Mac-Option gegen Ihren derzeitigen Remote-Mac testen. Für langfristig gleichbleibende Hochlast, spezielle physische Anschlüsse oder vollständig eigene Hardware bleibt ein gekaufter Mac die kontrollierbarere Lösung. Für temporäre CI/CD-Aufgaben, reproduzierbare Tests und einen zusätzlichen macOS-Knoten ist die Miete dagegen besonders dann sinnvoll, wenn Ihr aktueller Linux- oder Windows-basierter Aufbau die macOS-Sitzungs- und Toolchain-Anforderungen nicht zuverlässig abbilden kann.