Community生产力与协作github.com

rxdage/claude-skills

部署、运行和修复 Windows 上(Docker Desktop + WSL2 后端)的 Docker 化应用程序,源自真实端到端部署经验。每当你在 Windows 上使用 Docker Compose / Docker Desktop 遇到以下问题时使用此技能:Docker Desktop 无法启动或崩溃循环(尤其是包含“Inference manager”、“Secrets Engine”、“listener”或“系统无法访问文件”的错误);镜像拉取、pip/apt 安装、WSL 安装或模型权重下载超时或在中国大陆网络环境下 TLS 失败;设置无人值守/重启后自动启动操作(自动登录、任务计划程序、容器重启策略、锁屏);PowerShell 脚本乱码、解析失败、自行终止或输出红色错误文本;或者将 Docker 项目部署到新的 Windows 机器、恢复数据库卷以及使代码编辑在运行容器中生效。即使用户只说“Docker 在 Windows 上无法启动”、“让它开机自启”或类似的简短描述,也可使用此技能。

claude-skills 是什么?

该技能是一套经过实战验证的操作知识,专门用于在 Windows 11 桌面(特别是大陆网络环境下)将 Docker Compose 应用部署至无人值守、重启后可稳定运行的生产环境。它涵盖了 Docker Desktop 崩溃恢复、网络镜像配置、自动启动机制、PowerShell 脚本编码问题以及部署工作流等核心场景。该技能支持 Docker Desktop、WSL2、PowerShell 等平台,并提供针对性的参考文件(如 crash-recovery.md、china-network.md)用于解决具体错误。其核心原理包括:处理 Docker Desktop 因孤儿 AF_UNIX 套接字导致的启动失败、在中国大陆网络下优先使用镜像源、使用任务计划程序替代 HKCU 注册表自动启动项、保持 PowerShell 脚本纯 ASCII 编码以避免解析错误,以及利用绑定挂载实现代码热更新。该技能还强调记录“无效尝试”以避免重复踩坑。

兼容平台✓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 on Windows: 部署、运行和修复

本技能是来之不易的运维知识,源自将 Docker Compose 应用一路部署至 Windows 11 桌面(位于中国大陆网络环境)的 无人值守、重启后可运行的生产环境 过程。下面的错误看起来神秘莫测,修复方法也反直觉——这正是将其记录下来的原因。请优先参考这些内容,而不是盲目猜测;每一个问题都耗费了真正的调试时间。

这里没有任何特定于应用的内容——示例是一个 Python/FastAPI + pgvector 技术栈,但这些陷阱(Docker Desktop 套接字、网络封锁、自动启动、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://… / 系统无法访问文件 / 语法不正确references/crash-recovery.md
docker pull 出现 EOF/TLS 握手超时;构建时 pip/apt 失败;wsl --install 挂起;winget 报错 0x8a15000f;HuggingFace/模型下载 302 跳转到被封锁的主机references/china-network.md
必须在重启后无需人工干预运行(自动登录、自动启动、锁屏、重启策略),或者“我登录时没问题,但重启后不行”references/unattended-operation.md
.ps1 脚本乱码、报错 缺少 '}'、自行终止进程,或每个原生命令都显示恐怖的红色文本references/windows-scripting.md
部署到新的 Windows 机器、恢复数据库卷,或者“我修改了代码但容器没有变化”references/deploy-workflow.md

可推广的原则(即使不打开参考文件,也请大致浏览)

  1. Docker Desktop 在 Windows 上最严重的故障是孤立的 AF_UNIX 套接字,而非配置错误。 硬停止(崩溃/强制退出/断电)会在 %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 发布版可以直接连接。请参见 china-network.md。

  3. 在 Windows 自动登录下,HKCU\...\Run 自动启动条目会静默地不触发。 请改用登录时触发的任务计划程序任务。这是无人值守设置中最大的陷阱。请参见 unattended-operation.md。

  4. 编写 .ps1 文件时仅使用 ASCII。 PowerShell 5.1 将不带 BOM 的 UTF-8 文件读取为 GBK;任何非 ASCII 字符(例如中文注释)会破坏大括号匹配 → 缺少 '}' → 脚本立即终止且不留任何日志。保持脚本纯 ASCII;日志使用英文。请参见 windows-scripting.md。

  5. 挂载代码 = 重启,而非重建。 如果 docker-compose.yml 将源代码绑定挂载(./:/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 故障时,请将其添加到相应的参考文件中(症状 → 根本原因 → 有效的确切修复方法,以及无效的方法)。"无效尝试" 这一行通常是最有价值的部分——它可以防止下一个人再次尝试死胡同。

相关技能