Community生產力與協作github.com

rxdage/claude-skills

在 Windows(Docker Desktop + WSL2 後端)上部署、運行 Docker 化應用程式並解決常見問題。本技能源自實際端到端部署經驗,特別針對中國大陸網路環境下的常見故障提供明確修復方法。

claude-skills 是什麼?

本技能記錄了在 Windows 11 桌面環境(Docker Desktop + WSL2 後端,且身處中國大陸網路)中,將 Docker Compose 應用程式推向「無人值守、重啟後持續運行」生產環境的實戰經驗。它涵蓋 Docker Desktop 崩潰循環(由孤立 AF_UNIX socket 導致)、中國大陸網路環境下映像拉取與套件安裝逾時、開機自動啟動設定(自動登入、工作排程器)、PowerShell 腳本亂碼與語法錯誤,以及將 Docker 專案部署到新機器、還原資料庫磁碟區等場景。本技能的核心價值在於提供基於實際除錯的明確解決方案,而非猜測;它支援 Claude Code、Cursor 等 AI 代理工具,並以中文提供逐步指引。對於任何在 Windows 上使用 Docker 的開發者或維運人員,特別是遭遇上述特定故障時,本技能能顯著節省除錯時間。

相容平台✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/rxdage/claude-skills/tree/HEAD/docker-windows-ops

Installed? Explore more 生產力與協作 skills: steipete/gemini, steipete/gh-issues, steipete/skill-creator · View all 6 →

在你喜歡的 AI 中提問

開啟一個已預先載入此 Agent Skill 的新對話。

說明文件

Docker 在 Windows 上的部署、運行與故障排除

此技能源自將 Docker Compose 應用程式完整部署到 Windows 11 桌面(中國大陸網路環境)並實現「無人值守、重啟後持續運行」的實際操作知識。下列錯誤看似玄妙,修復方法亦非直觀——正因如此,才值得記錄下來。寧可依循此處解法,也不要胡亂猜測;每一項修復都耗費了真實的除錯時間。

此處內容並未綁定特定應用——範例為 Python/FastAPI + pgvector 堆疊,但常見陷阱(Docker Desktop Socket、網路封鎖、自動啟動、PowerShell 編碼)會影響任何在 Windows 上的 Docker 化專案。

首先,先確認狀況再行動

以下快速檢查可決定你需要參考哪個檔案:

  • Docker 是否正在執行? docker version (客戶端+伺服器)、docker compose ps。若伺服器錯誤通常表示 Docker Desktop 啟動時崩潰 → 參考 crash-recovery.md。
  • WSL2 後端正常? wsl -l -v — 發行版 (例如 docker-desktop) 應顯示為 Running。
  • 是否為中國大陸網路? 若映像拉取或下載逾時或 TLS 失敗,假設網路被封鎖,並在重試前先前往 china-network.md。
  • 是否需要重啟後無人值守執行? 這不是單一設定能解決,而是一整套流程 → unattended-operation.md。

症狀 → 參考文件對照表

症狀參考文件
Docker Desktop 無法啟動、崩潰循環、或記錄 Inference manager / Secrets Engine / listening on unix://… / the file cannot be accessed by the system / syntax is incorrectreferences/crash-recovery.md
docker pull 出現 EOF/TLS handshake timeout;建構時 pip/apt 失敗;wsl --install 卡住;winget 0x8a15000f;HuggingFace/模型下載 302 轉向到被封鎖的主機references/china-network.md
必須在重啟後無人值守執行(自動登入、自動啟動、鎖定螢幕、重新啟動原則),或「我登入時能運作,但開機後卻無法」references/unattended-operation.md
.ps1 腳本亂碼、出現 Missing closing '}'、殺死自身程序、或每個原生指令都輸出紅色錯誤文字references/windows-scripting.md
部署到新 Windows 機器、還原資料庫磁碟區、或「我編輯了程式碼但容器沒有變更」references/deploy-workflow.md

可通用的原則(即使不閱讀參考文件,也請略讀此處)

  1. Docker Desktop 在 Windows 上最嚴重的故障是孤立的 AF_UNIX socket,而非設定錯誤。 硬停止(崩潰/強制退出/斷電)會留下無法刪除的 reparse-point socket 檔案,位於 %LOCALAPPDATA%\Docker\run\ 和 %LOCALAPPDATA%\docker-secrets-engine\ 下。Docker 下次啟動時嘗試移除並重新建立它們,因而陷入崩潰循環。你無法刪除它們(Remove-Item/.NET Delete 都會失敗)——但你可以重新命名父目錄(這是一個中繼資料操作,能繞過存取錯誤)。重新命名後,Docker 會乾淨重建。切換 EnableInference/EnableDockerAI 無法解決此問題。詳見 crash-recovery.md。

  2. 在中國大陸網路環境下,優先使用鏡像,其次才是直接連線。 Docker Hub、winget、線上 wsl --install、deb.debian.org 和 HuggingFace 大型權重檔案會被封鎖或不穩定。註冊表鏡像、清華 pip/apt、離線 WSL MSI、以及 ModelScope 用於模型權重,才是可靠路徑。desktop.docker.com 和 GitHub Releases 可以直接連線。詳見 china-network.md。

  3. 在 Windows 自動登入下,HKCU\...\Run 自動啟動項目會默默地不觸發**。** 應改用「登入時」觸發的工作排程器任務。這是無人值守設定中最容易踩的坑。詳見 unattended-operation.md。

  4. 撰寫 .ps1 檔案時請僅使用 ASCII 字元。 PowerShell 5.1 將無 BOM 的 UTF-8 檔案視為 GBK;任何非 ASCII 字元(例如中文註解)都會破壞大括號配對 → Missing closing '}' → 腳本立即死亡,不留任何記錄。請保持腳本純 ASCII;記錄日誌使用英文。詳見 windows-scripting.md。

  5. 掛載的程式碼 = 重啟,而非重建。 若 docker-compose.yml 使用 bind mount 掛載原始碼 (./:/app),編輯程式碼後執行 docker compose restart <svc> 即可生效——不需要重建映像。僅在依賴項目或 Dockerfile 變更時才需重建。在讓實際排程觸發之前,先用一次性的 docker compose exec <svc> python … 進行乾運行驗證邏輯變更,這樣你就不會透過發送測試資料到正式輸出通道來測試。詳見 deploy-workflow.md。

  6. 尊重單寫入者限制。 若應用程式按排程將資料推送到外部通道,同一時間只能有一台機器執行排程器——兩份副本會導致重複傳送。在啟動新機器之前,請先關閉舊機器 (docker compose down)。

  7. Claude 無法靜默取得管理員權限。 任何需要權限提升的系統變更都必須由使用者在 UAC 提示中確認 (Start-Process -Verb RunAs 會觸發該提示)。請將此類步驟清楚標記為 「需手動操作 / manual step」——操作者為中文使用者且基礎架構較少,需要逐步指引並明確標出需手動介入的時機。自動權限模式也會封鎖 ExecutionPolicy Bypass + elevation,因此請不要繞過提示。

如何擴充此技能

當遇到新的非顯而易見的 Windows/Docker 故障並解決後,請將其加入對應的參考檔案(症狀 → 根因 → 確實有效的修復方法,以及無效的方法)。「無效的方法」這一行通常最具價值——它能阻止下一個人重試死胡同。

相關技能