Was macht Docker auf Windows: Bereitstellen, Ausführen und Reparieren?
Diese Fähigkeit enthält mühsam erarbeitetes Betriebswissen aus der Bereitstellung einer Docker-Compose-App für den unbeaufsichtigten, neustartsicheren Produktionsbetrieb auf einem Windows-11-Desktop hinter einem Netzwerk in Festland-China. Die unten aufgeführten Fehler wirken kryptisch, und die Lösungen sind kontraintuitiv – genau deshalb sind sie hier festgehalten. Bevorzugen Sie diese gegenüber dem Raten; jeder einzelne hat echte Debugging-Zeit gekostet.
Hier ist nichts app-spezifisch – das laufende Beispiel war ein Python/FastAPI- + pgvector-Stack, aber die Fallstricke (Docker-Desktop-Sockets, Netzwerkblockaden, Autostart, PowerShell-Kodierung) treffen auf jedes Docker-Projekt unter Windows zu.
Zuerst orientieren, dann handeln
Schnelle Checks, die entscheiden, welche Referenzdatei Sie benötigen:
- Läuft Docker überhaupt?
docker version(Client+Server),docker compose ps. Ein Serverfehler bedeutet meist, dass Docker Desktop beim Start abgestürzt ist →crash-recovery.md. - WSL2-Backend intakt?
wsl -l -v– die Distribution (z. B.docker-desktop) sollteRunninganzeigen. - Festland-China-Netzwerk? Wenn Pulls/Downloads timeouten oder TLS-Fehler auftreten, gehen Sie davon aus, dass das Netzwerk blockiert, und wechseln Sie zu
china-network.md, bevor Sie Zeit mit Wiederholungen verschwenden. - Muss es Neustarts überstehen, ohne dass jemand zusieht? Das ist eine ganze Kette, keine einzelne Einstellung →
unattended-operation.md.
Symptom → Referenz
| Was Sie sehen | Lesen Sie |
|---|---|
Docker Desktop startet nicht, stürzt im Loop ab oder protokolliert Inference manager / Secrets Engine / listening on unix://… / the file cannot be accessed by the system / syntax is incorrect | references/crash-recovery.md |
docker pull EOF/TLS handshake timeout; pip/apt schlagen in einem Build fehl; wsl --install hängt; winget 0x8a15000f; HuggingFace/Modell-Download 302 zu einem blockierten Host | references/china-network.md |
| Muss nach Neustart ohne menschliches Eingreifen ausgeführt werden (Auto-Login, Autostart, Sperrbildschirm, Neustartrichtlinie), oder „es hat funktioniert, als ich eingeloggt war, aber nicht beim Booten“ | references/unattended-operation.md |
Ein .ps1 verstümmelt Nicht-ASCII-Zeichen, stirbt mit Missing closing '}', tötet seinen eigenen Prozess, oder jeder native Befehl gibt erschreckenden roten Text aus | references/windows-scripting.md |
| Bereitstellen auf einer neuen Windows-Box, Wiederherstellen eines DB-Volumes oder „Ich habe den Code bearbeitet, aber der Container hat sich nicht geändert“ | references/deploy-workflow.md |
Grundsätze, die verallgemeinern (überfliegen Sie diese, auch wenn Sie keine Referenz öffnen)
-
Docker Desktops schlimmster Windows-Fehler ist ein verwaister AF_UNIX-Socket, kein Konfigurationsfehler. Ein harter Stopp (Absturz/erzwungenes Beenden/Stromausfall) hinterlässt nicht löschbare Reparse-Punkt-Socket-Dateien unter
%LOCALAPPDATA%\Docker\run\und%LOCALAPPDATA%\docker-secrets-engine\. Docker versucht, sie beim nächsten Start zu entfernen und neu zu erstellen, und stürzt im Loop ab. Sie können sie nicht löschen (Remove-Item/.NETDeleteschlagen beide fehl) – aber Sie können das übergeordnete Verzeichnis umbenennen (ein Metadaten-Vorgang, der den Zugriffsfehler umgeht). Benennen Sie es um, Docker baut sauber neu auf. Das Umschalten vonEnableInference/EnableDockerAIbehebt es nicht. Siehecrash-recovery.md. -
In einem Festland-China-Netzwerk greifen Sie zuerst zu Spiegeln, dann direkt. Docker Hub,
winget, Online-wsl --install,deb.debian.orgund HuggingFace große Gewichte sind blockiert oder unzuverlässig. Registry-Mirrors, Tsinghua-Pip/Apt, ein Offline-WSL-MSI und ModelScope für Modellgewichte sind die zuverlässigen Wege.desktop.docker.comund GitHub-Releases stellen eine direkte Verbindung her. Siehechina-network.md. -
Bei Windows-Auto-Login werden
HKCU\...\Run-Autostart-Einträge STILLSCHWEIGEND NICHT ausgeführt. Verwenden Sie stattdessen einen Task Scheduler-Auftrag, der bei Anmeldung ausgelöst wird. Dies ist der mit Abstand größte Stolperstein bei unbeaufsichtigten Einrichtungen. Sieheunattended-operation.md. -
Schreiben Sie
.ps1-Dateien nur mit ASCII-Zeichen. PowerShell 5.1 liest eine UTF-8-Datei ohne BOM als GBK; jedes Nicht-ASCII-Zeichen (z. B. chinesische Kommentare) beschädigt den Klammerabgleich →Missing closing '}'→ das Skript stirbt sofort, ohne ein Protokoll zu hinterlassen. Halten Sie Skripte reinen ASCII; protokollieren Sie auf Englisch. Siehewindows-scripting.md. -
Gemounteter Code = Neustart, kein Neubau. Wenn
docker-compose.ymldas Quellverzeichnis bindet (./:/app), wird eine Codeänderung mitdocker compose restart <svc>wirksam – kein Image-Neubau. Bauen Sie nur neu, wenn sich Abhängigkeiten/Dockerfile ändern. Überprüfen Sie Logikänderungen mit einem Wegwerf-docker compose exec <svc> python …-Trockenlauf, bevor Sie den eigentlichen Zeitplan auslösen, damit Sie niemals testen, indem Sie einen Live-Ausgabekanal zuspammen. Siehedeploy-workflow.md. -
Beachten Sie Single-Writer-Beschränkungen. Wenn die App nach einem Zeitplan an einen externen Kanal sendet, darf nur ein Rechner den Zeitplan gleichzeitig ausführen – zwei Kopien = doppelte Sendungen. Fahren Sie den alten herunter (
docker compose down), bevor Sie den neuen starten. -
Claude kann sich nicht stillschweigend Administratorrechte verschaffen. Jede Systemänderung, die eine Erhöhung erfordert, muss vom Menschen in einer UAC-Eingabeaufforderung bestätigt werden (
Start-Process -Verb RunAslöst sie aus). Kennzeichnen Sie solche Schritte deutlich als "需手动操作 / manueller Schritt" – der Bediener hier ist chinesischsprachig und infrastrukturschwach und schätzt eine Schritt-für-Schritt-Anleitung mit gekennzeichneten manuellen Momenten. Auto-Berechtigungsmodi blockieren auchExecutionPolicy Bypass + elevation, umgehen Sie also nicht die Eingabeaufforderung.
So erweitern Sie diese Fähigkeit
Wenn ein neuer, nicht offensichtlicher Windows-/Docker-Fehler gelöst wird, fügen Sie ihn der entsprechenden Referenzdatei hinzu (Symptom → Ursache → die genaue Lösung, die funktioniert hat, und was nicht funktioniert hat). Die Zeile "was nicht funktioniert hat" ist oft der wertvollste Teil – sie verhindert, dass die nächste Person Sackgassen erneut durchläuft.