{"id":"d3606b93-6b7e-49d8-b59d-2ad1903c8aa6","entityType":"agent","slug":"clawhub-zhaohaixin-docker-image-puller","name":"docker-image-puller","canonicalUrl":"https://www.xpersona.co/agent/clawhub-zhaohaixin-docker-image-puller","canonicalPath":"/agent/clawhub-zhaohaixin-docker-image-puller","generatedAt":"2026-10-11T14:13:38.657Z","source":"CLAWHUB","claimStatus":"UNCLAIMED","verificationTier":"NONE","summary":{"evidence":{"source":"editorial-content","verified":true,"confidence":"high","updatedAt":"2026-10-11T09:36:36.099Z","emptyReason":null},"description":"使用 Python 脚本下载 Docker 镜像并打包为 tar 文件。当用户说\"下载镜像\"、\"拉取镜像\"、\"pull xxx\"、\"帮我下载 nginx 镜像\"等触发此技能。支持 SOCKS5 代理直连下载（推荐）和国内镜像站加速两种模式。 Skill: docker-image-puller Owner: zhaohaixin Summary: 使用 Python 脚本下载 Docker 镜像并打包为 tar 文件。当用户说\"下载镜像\"、\"拉取镜像\"、\"pull xxx\"、\"帮我下载 nginx 镜像\"等触发此技能。支持 SOCKS5 代理直连下载（推荐）和国内镜像站加速两种模式。 Tags: latest:1.3.1 Version history: v1.3.1 | 2026-08-06T05:58:57.254Z | user 关联 GitHub 源码仓库（zhaohaixin/docker-image-puller），建立正规版本管理流程 v1.3.0 | 2026-05-17T15:40:12.430Z | auto **安全增强和执行模式更新** - 镜像下载命令切换为参数数组方式 (shell=false)，防止命令注入风险。 - 明确要求 Dock","descriptionLabel":"Technical summary","evidenceSummary":"Capability contract not published. No trust telemetry is available yet. 1.1K downloads reported by the source. Last updated 10/11/2026.","installCommand":"clawhub skill install s178qpv12qw21hq4g7515c10x583wp35:docker-image-puller","sourceUrl":"https://clawhub.ai/zhaohaixin/docker-image-puller","homepage":"https://clawhub.ai/zhaohaixin/skills/docker-image-puller","primaryLinks":[{"label":"View on ClawHub","url":"https://clawhub.ai/zhaohaixin/docker-image-puller","kind":"source"},{"label":"Homepage","url":"https://clawhub.ai/zhaohaixin/skills/docker-image-puller","kind":"homepage"}],"safetyScore":84,"overallRank":62,"popularityScore":61,"trustScore":null,"claimedByName":null,"isOwner":false,"seoDescription":"使用 Python 脚本下载 Docker 镜像并打包为 tar 文件。当用户说\"下载镜像\"、\"拉取镜像\"、\"pull xxx\"、\"帮我下载 nginx 镜像\"等触发此技能。支持 SOCKS5 代理直连下载（推荐）和国内镜像站加速两种模式。 Skill: docker-image-puller Owner: zhaoh"},"coverage":{"evidence":{"source":"public-profile","verified":false,"confidence":"medium","updatedAt":"2026-10-11T09:36:36.099Z","emptyReason":null},"protocols":[{"protocol":"OPENCLEW","label":"OpenClaw","status":"self-declared","notes":"Declared in the public agent profile."}],"capabilities":[],"verifiedCount":0,"selfDeclaredCount":1,"capabilityMatrix":{"rows":[{"key":"OPENCLEW","type":"protocol","support":"unknown","confidenceSource":"profile","notes":"Listed on profile"}],"flattenedTokens":"protocol:OPENCLEW|unknown|profile"}},"adoption":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-11T09:36:36.099Z","emptyReason":null},"stars":null,"forks":null,"downloads":1098,"packageName":null,"latestVersion":"1.3.1","tractionLabel":"1.1K downloads"},"release":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-11T09:36:36.039Z","emptyReason":null},"lastUpdatedAt":"2026-10-11T09:36:36.099Z","lastCrawledAt":"2026-10-11T09:36:36.039Z","lastIndexedAt":null,"nextCrawlAt":"2026-10-12T09:36:36.039Z","lastVerifiedAt":null,"highlights":[{"version":"1.3.1","createdAt":"2026-08-06T05:58:57.254Z","changelog":"关联 GitHub 源码仓库（zhaohaixin/docker-image-puller），建立正规版本管理流程","fileCount":5,"zipByteSize":10610},{"version":"1.3.0","createdAt":"2026-05-17T15:40:12.430Z","changelog":"**安全增强和执行模式更新** - 镜像下载命令切换为参数数组方式 (`shell=false`)，防止命令注入风险。 - 明确要求 Docker 镜像名仅限合法字符，含有特殊字符时需要用户确认。 - 脚本默认启用 HTTPS 连接校验（`verify=True`），提升安全性。 - 文档流程说明与命令格式同步更新，反映安全和执行细节改进。","fileCount":5,"zipByteSize":10592},{"version":"1.2.1","createdAt":"2026-05-12T04:18:14.482Z","changelog":"重新发布（之前被下架）","fileCount":4,"zipByteSize":9145},{"version":"1.2.0","createdAt":"2026-05-11T08:07:43.369Z","changelog":"- 首次配置流程优化：若 config.json 的 arch 字段为空，自动触发用户引导，选择目标架构（amd64 或 arm64v8）。 - 优化配置说明，明确支持多平台架构，提醒用户首次需手动选择架构类型。 - 下载流程提示增强，用户在后台下载时将明确收到目标架构信息。 - 允许随时切换下载模式或指定架构，提高灵活性与可操作性。","fileCount":4,"zipByteSize":9146},{"version":"1.1.0","createdAt":"2026-05-11T07:46:57.029Z","changelog":"- Updated documentation for Chinese-speaking users with improved clarity and detailed workflow in Chinese. - Enhanced usage instructions, trigger phrases, and setup guidance for both proxy and mirror modes. - Reformatted command examples and workflow steps for better readability. - Clarified result reporting and error handling steps. - No functional/script changes—documentation (SKILL.md) only.","fileCount":4,"zipByteSize":9056},{"version":"1.0.0","createdAt":"2026-05-11T07:40:28.278Z","changelog":"- Initial release of docker-image-puller: download and save Docker images as tar files for offline use. - Supports SOCKS5 proxy and mirror acceleration for image downloads. - Interactive setup for config on first run, including proxy/mirror settings and architecture selection. - Runs Docker image pulls in the background and notifies users upon completion. - Clear error handling for timeout, network, auth, and disk space issues.","fileCount":4,"zipByteSize":8932}]},"execution":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No published capability contract is available yet."},"installCommand":"clawhub skill install s178qpv12qw21hq4g7515c10x583wp35:docker-image-puller","setupComplexity":"low","setupSteps":["Setup complexity is classified as HIGH. You must provision dedicated cloud infrastructure or an isolated VM. Do not run this directly on your local workstation.","Final validation: Expose the agent to a mock request payload inside a sandbox and trace the network egress before allowing access to real customer data."],"contract":{"contractStatus":"missing","authModes":[],"requires":[],"forbidden":[],"supportsMcp":false,"supportsA2a":false,"supportsStreaming":false,"inputSchemaRef":null,"outputSchemaRef":null,"dataRegion":null,"contractUpdatedAt":null,"sourceUpdatedAt":null,"freshnessSeconds":null},"invocationGuide":{"preferredApi":{"snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-zhaohaixin-docker-image-puller/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-zhaohaixin-docker-image-puller/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-zhaohaixin-docker-image-puller/trust"},"curlExamples":["curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-zhaohaixin-docker-image-puller/snapshot\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-zhaohaixin-docker-image-puller/contract\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-zhaohaixin-docker-image-puller/trust\""],"jsonRequestTemplate":{"query":"summarize this repo","constraints":{"maxLatencyMs":2000,"protocolPreference":["OPENCLEW"]}},"jsonResponseTemplate":{"ok":true,"result":{"summary":"...","confidence":0.9},"meta":{"source":"CLAWHUB","generatedAt":"2026-10-11T14:13:38.657Z"}},"retryPolicy":{"maxAttempts":3,"backoffMs":[500,1500,3500],"retryableConditions":["HTTP_429","HTTP_503","NETWORK_TIMEOUT"]}},"endpoints":{"dossierUrl":"https://www.xpersona.co/api/v1/agents/clawhub-zhaohaixin-docker-image-puller/dossier","snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-zhaohaixin-docker-image-puller/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-zhaohaixin-docker-image-puller/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-zhaohaixin-docker-image-puller/trust"}},"reliability":{"evidence":{"source":"runtime-metrics","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No trust, reliability, or runtime telemetry is available."},"trust":{"status":"unavailable","handshakeStatus":"UNKNOWN","verificationFreshnessHours":null,"reputationScore":null,"p95LatencyMs":null,"successRate30d":null,"fallbackRate":null,"attempts30d":null,"trustUpdatedAt":null,"trustConfidence":"unknown","sourceUpdatedAt":null,"freshnessSeconds":null},"decisionGuardrails":{"doNotUseIf":["Contract metadata is missing or unavailable for deterministic execution."],"safeUseWhen":[],"riskFlags":["missing_or_unavailable_contract","trust_data_unavailable","schema_references_missing"],"operationalConfidence":"low"},"executionMetrics":{"observedLatencyMsP50":null,"observedLatencyMsP95":null,"estimatedCostUsd":null,"uptime30d":null,"rateLimitRpm":null,"rateLimitBurst":null,"lastVerifiedAt":null,"verificationSource":null},"runtimeMetrics":{"successRate":null,"avgLatencyMs":null,"avgCostUsd":null,"hallucinationRate":null,"retryRate":null,"disputeRate":null,"p50Latency":null,"p95Latency":null,"lastUpdated":null}},"benchmarks":{"evidence":{"source":"no-benchmark-data","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No benchmark suites or observed failure patterns are available."},"suites":[],"failurePatterns":[]},"artifacts":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"high","updatedAt":"2026-10-11T09:36:36.099Z","emptyReason":null},"readme":"Skill: docker-image-puller\n\nOwner: zhaohaixin\n\nSummary: 使用 Python 脚本下载 Docker 镜像并打包为 tar 文件。当用户说\"下载镜像\"、\"拉取镜像\"、\"pull xxx\"、\"帮我下载 nginx 镜像\"等触发此技能。支持 SOCKS5 代理直连下载（推荐）和国内镜像站加速两种模式。\n\nTags: latest:1.3.1\n\nVersion history:\n\nv1.3.1 | 2026-08-06T05:58:57.254Z | user\n\n关联 GitHub 源码仓库（zhaohaixin/docker-image-puller），建立正规版本管理流程\n\nv1.3.0 | 2026-05-17T15:40:12.430Z | auto\n\n**安全增强和执行模式更新**\n\n- 镜像下载命令切换为参数数组方式 (`shell=false`)，防止命令注入风险。\n- 明确要求 Docker 镜像名仅限合法字符，含有特殊字符时需要用户确认。\n- 脚本默认启用 HTTPS 连接校验（`verify=True`），提升安全性。\n- 文档流程说明与命令格式同步更新，反映安全和执行细节改进。\n\nv1.2.1 | 2026-05-12T04:18:14.482Z | user\n\n重新发布（之前被下架）\n\nv1.2.0 | 2026-05-11T08:07:43.369Z | auto\n\n- 首次配置流程优化：若 config.json 的 arch 字段为空，自动触发用户引导，选择目标架构（amd64 或 arm64v8）。\n- 优化配置说明，明确支持多平台架构，提醒用户首次需手动选择架构类型。\n- 下载流程提示增强，用户在后台下载时将明确收到目标架构信息。\n- 允许随时切换下载模式或指定架构，提高灵活性与可操作性。\n\nv1.1.0 | 2026-05-11T07:46:57.029Z | auto\n\n- Updated documentation for Chinese-speaking users with improved clarity and detailed workflow in Chinese.\n- Enhanced usage instructions, trigger phrases, and setup guidance for both proxy and mirror modes.\n- Reformatted command examples and workflow steps for better readability.\n- Clarified result reporting and error handling steps.\n- No functional/script changes—documentation (SKILL.md) only.\n\nv1.0.0 | 2026-05-11T07:40:28.278Z | auto\n\n- Initial release of docker-image-puller: download and save Docker images as tar files for offline use.\n- Supports SOCKS5 proxy and mirror acceleration for image downloads.\n- Interactive setup for config on first run, including proxy/mirror settings and architecture selection.\n- Runs Docker image pulls in the background and notifies users upon completion.\n- Clear error handling for timeout, network, auth, and disk space issues.\n\nArchive index:\n\nArchive v1.3.1: 5 files, 10610 bytes\n\nFiles: _meta.json (138b), config.json (195b), scripts/docker_image_puller.py (21763b), skill-card.md (2182b), SKILL.md (3474b)\n\nFile v1.3.1:SKILL.md\n\n---\nname: docker-image-puller\ndescription: 使用 Python 脚本下载 Docker 镜像并打包为 tar 文件。当用户说\"下载镜像\"、\"拉取镜像\"、\"pull xxx\"、\"帮我下载 nginx 镜像\"等触发此技能。支持 SOCKS5 代理直连下载（推荐）和国内镜像站加速两种模式。\n---\n\n# Docker 镜像拉取工具\n\n从任意 Docker Registry 拉取镜像，打包为 `.tar` 文件供离线 `docker load` 使用。\n\n## 资源文件\n\n- 脚本：`scripts/docker_image_puller.py`\n- 配置：`config.json`（首次运行时引导生成）\n\n## 首次使用 — 配置引导\n\n检查 `config.json` 中 `arch` 字段：\n- 若为空（`\"\"` 或不存在），引导用户完成首次配置：\n  1. **下载方式** — 代理下载（推荐，最稳定）或镜像加速\n  2. **代理地址**（代理模式）— 默认 `127.0.0.1:7890`\n  3. **镜像站地址**（镜像模式）— 或让脚本运行时显示推荐列表\n  4. **目标架构** — `amd64`（x86 服务器，默认）或 `arm64v8`（ARM 服务器）\n- 若 `arch` 已有值，跳过引导，直接使用该配置\n\n`script_dir` 自动解析为技能自带的 `scripts/` 目录。\n\n### config.json 结构\n\n```json\n{\n  \"mode\": \"proxy\",\n  \"proxy_address\": \"127.0.0.1:7890\",\n  \"mirror_url\": \"\",\n  \"arch\": \"\",\n  \"script_dir\": \"\",\n  \"version\": 1\n}\n```\n\n`arch` 为空时触发首次引导。\n\n## 执行流程\n\n### 1. 读取配置，构建命令（安全执行）\n\n读取 `config.json`，根据 mode 构建命令。使用 `exec` 的 `shell=false`（参数数组）方式调用，避免 shell 注入。\n\n**代理模式：**\n```python\nexec(\n  command=\"python3 docker_image_puller.py -i '<image>' --socks5 --socks5-proxy '<proxy>' -a '<arch>'\",\n  workdir=\"<script_dir>\"\n)\n```\n\n**镜像加速模式：**\n```python\nexec(\n  command=\"printf 'y\\\\ny\\\\n<mirror>' | python3 docker_image_puller.py -i '<image>' -a '<arch>'\",\n  workdir=\"<script_dir>\"\n)\n```\n\n> ⚠️ 镜像名必须为合法 Docker 镜像引用（仅含字母、数字、`/`、`:`、`-`、`.`、`_`），包含其他字符时先向用户确认。\n\n### 2. Sub-Agent 后台下载\n\n使用 `sessions_spawn` 启动隔离子任务，不阻塞主会话：\n\n```\nsessions_spawn(\n  task=\"读取 <skill-dir>/config.json 获取配置。为镜像 '<镜像名>' 构建下载命令。用 exec 执行（background=true, timeout=600）。每 30 秒用 process 轮询进度。完成后报告 tar 路径和 docker load 命令。失败则报告具体原因。\",\n  mode=\"run\",\n  runtime=\"subagent\",\n  timeoutSeconds=900\n)\n```\n\n立即回复用户：\n> 📥 已启动后台下载 `<镜像名>`（架构：<架构>）... 完成后会通知你，可继续其他操作。\n\n### 3. 结果报告\n\n| 结果 | 处理方式 |\n|------|---------|\n| ✅ 成功 | 报告 tar 文件路径 + `docker load -i <路径>` |\n| ⏱ 超时 | \"下载超时，请检查网络或代理\" |\n| 🔒 认证失败 401 | 请用户提供仓库用户名/密码 |\n| 🌐 网络错误 | 报告具体 HTTP 错误码和失败 URL |\n| 💾 磁盘不足 | 提醒用户清理磁盘空间 |\n\n## 补充说明\n\n- **安全**：脚本启用 HTTPS 证书校验（`verify=True`），不再禁用 TLS 验证。执行镜像下载时使用参数数组而非 shell 拼接，防止命令注入。\n- 输出路径：`<script_dir>/images/<仓库>_<标签>_<架构>.tar`\n- 脚本运行完毕后自动清理 `tmp/` 临时目录，无需手动处理\n- `config.json` 跨次复用，用户可随时要求切换下载模式或指定架构\n\nFile v1.3.1:_meta.json\n\n{\n  \"ownerId\": \"kn708zphbthck6epdfhqrap4xd8293d5\",\n  \"slug\": \"docker-image-puller\",\n  \"version\": \"1.3.1\",\n  \"publishedAt\": 1785995937254\n}\n\nFile v1.3.1:skill-card.md\n\n## Description:\n\nDownloads Docker images from registries and packages them as tar files for offline docker load use, with SOCKS5 proxy and mirror-based download modes.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[zhaohaixin](https://clawhub.ai/user/zhaohaixin)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nDevelopers and operations engineers use this skill to fetch Docker images for offline transfer or environments where direct docker pull access is unreliable. It helps configure proxy or mirror download settings, choose a target architecture, run the pull workflow, and report the generated tar path and docker load command.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: Registry credentials or private registry details could be exposed through command-line arguments or debug output.\n\nMitigation: Avoid passing registry passwords on the command line and avoid debug mode when working with private registries.\n\nRisk: Downloaded image content may be untrusted or altered before it is loaded into Docker.\n\nMitigation: Verify downloaded images independently before loading or running them.\n\nRisk: Mirror-mode execution uses shell-style pipelines with configuration-derived values.\n\nMitigation: Review or update the mirror-mode execution path so it avoids shell pipelines with interpolated configuration.\n\n## Reference(s):\n\n- [ClawHub skill page](https://clawhub.ai/zhaohaixin/skills/docker-image-puller)\n\n## Skill Output:\n\n**Output Type(s):** [text, markdown, shell commands, configuration, files, guidance]\n\n**Output Format:** [Markdown or plain text status reports with inline shell commands and generated Docker image tar paths]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Successful runs produce Docker image tar archives intended for docker load.]\n\n## Skill Version(s):\n\n1.3.1 (source: ClawHub release evidence)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nFile v1.3.1:config.json\n\n{\n  \"mode\": \"proxy\",\n  \"proxy_address\": \"127.0.0.1:7890\",\n  \"mirror_url\": \"\",\n  \"arch\": \"\",\n  \"script_dir\": \"/Users/zhao/.openclaw/workspace/skills/docker-image-puller/scripts\",\n  \"version\": 1\n}\n\nArchive v1.3.0: 5 files, 10592 bytes\n\nFiles: config.json (195b), scripts/docker_image_puller.py (21763b), skill-card.md (2186b), SKILL.md (3474b), _meta.json (138b)\n\nFile v1.3.0:SKILL.md\n\n---\nname: docker-image-puller\ndescription: 使用 Python 脚本下载 Docker 镜像并打包为 tar 文件。当用户说\"下载镜像\"、\"拉取镜像\"、\"pull xxx\"、\"帮我下载 nginx 镜像\"等触发此技能。支持 SOCKS5 代理直连下载（推荐）和国内镜像站加速两种模式。\n---\n\n# Docker 镜像拉取工具\n\n从任意 Docker Registry 拉取镜像，打包为 `.tar` 文件供离线 `docker load` 使用。\n\n## 资源文件\n\n- 脚本：`scripts/docker_image_puller.py`\n- 配置：`config.json`（首次运行时引导生成）\n\n## 首次使用 — 配置引导\n\n检查 `config.json` 中 `arch` 字段：\n- 若为空（`\"\"` 或不存在），引导用户完成首次配置：\n  1. **下载方式** — 代理下载（推荐，最稳定）或镜像加速\n  2. **代理地址**（代理模式）— 默认 `127.0.0.1:7890`\n  3. **镜像站地址**（镜像模式）— 或让脚本运行时显示推荐列表\n  4. **目标架构** — `amd64`（x86 服务器，默认）或 `arm64v8`（ARM 服务器）\n- 若 `arch` 已有值，跳过引导，直接使用该配置\n\n`script_dir` 自动解析为技能自带的 `scripts/` 目录。\n\n### config.json 结构\n\n```json\n{\n  \"mode\": \"proxy\",\n  \"proxy_address\": \"127.0.0.1:7890\",\n  \"mirror_url\": \"\",\n  \"arch\": \"\",\n  \"script_dir\": \"\",\n  \"version\": 1\n}\n```\n\n`arch` 为空时触发首次引导。\n\n## 执行流程\n\n### 1. 读取配置，构建命令（安全执行）\n\n读取 `config.json`，根据 mode 构建命令。使用 `exec` 的 `shell=false`（参数数组）方式调用，避免 shell 注入。\n\n**代理模式：**\n```python\nexec(\n  command=\"python3 docker_image_puller.py -i '<image>' --socks5 --socks5-proxy '<proxy>' -a '<arch>'\",\n  workdir=\"<script_dir>\"\n)\n```\n\n**镜像加速模式：**\n```python\nexec(\n  command=\"printf 'y\\\\ny\\\\n<mirror>' | python3 docker_image_puller.py -i '<image>' -a '<arch>'\",\n  workdir=\"<script_dir>\"\n)\n```\n\n> ⚠️ 镜像名必须为合法 Docker 镜像引用（仅含字母、数字、`/`、`:`、`-`、`.`、`_`），包含其他字符时先向用户确认。\n\n### 2. Sub-Agent 后台下载\n\n使用 `sessions_spawn` 启动隔离子任务，不阻塞主会话：\n\n```\nsessions_spawn(\n  task=\"读取 <skill-dir>/config.json 获取配置。为镜像 '<镜像名>' 构建下载命令。用 exec 执行（background=true, timeout=600）。每 30 秒用 process 轮询进度。完成后报告 tar 路径和 docker load 命令。失败则报告具体原因。\",\n  mode=\"run\",\n  runtime=\"subagent\",\n  timeoutSeconds=900\n)\n```\n\n立即回复用户：\n> 📥 已启动后台下载 `<镜像名>`（架构：<架构>）... 完成后会通知你，可继续其他操作。\n\n### 3. 结果报告\n\n| 结果 | 处理方式 |\n|------|---------|\n| ✅ 成功 | 报告 tar 文件路径 + `docker load -i <路径>` |\n| ⏱ 超时 | \"下载超时，请检查网络或代理\" |\n| 🔒 认证失败 401 | 请用户提供仓库用户名/密码 |\n| 🌐 网络错误 | 报告具体 HTTP 错误码和失败 URL |\n| 💾 磁盘不足 | 提醒用户清理磁盘空间 |\n\n## 补充说明\n\n- **安全**：脚本启用 HTTPS 证书校验（`verify=True`），不再禁用 TLS 验证。执行镜像下载时使用参数数组而非 shell 拼接，防止命令注入。\n- 输出路径：`<script_dir>/images/<仓库>_<标签>_<架构>.tar`\n- 脚本运行完毕后自动清理 `tmp/` 临时目录，无需手动处理\n- `config.json` 跨次复用，用户可随时要求切换下载模式或指定架构\n\nFile v1.3.0:_meta.json\n\n{\n  \"ownerId\": \"kn708zphbthck6epdfhqrap4xd8293d5\",\n  \"slug\": \"docker-image-puller\",\n  \"version\": \"1.3.0\",\n  \"publishedAt\": 1779032412430\n}\n\nFile v1.3.0:skill-card.md\n\n## Description: <br>\nDownloads Docker images with a Python script and packages them as tar files for offline docker load use, supporting SOCKS5 proxy downloads and mirror acceleration. <br>\n\nThis skill is ready for commercial/non-commercial use. <br>\n\n## Publisher: <br>\n[zhaohaixin](https://clawhub.ai/user/zhaohaixin) <br>\n\n### License/Terms of Use: <br>\nMIT-0 <br>\n\n\n## Use Case: <br>\nDevelopers and engineers use this skill to pull Docker images from registries and package them as offline tar archives for transfer or later docker load. It is intended for explicit image download requests with configurable architecture, proxy, or mirror settings. <br>\n\n### Deployment Geography for Use: <br>\nGlobal <br>\n\n## Known Risks and Mitigations: <br>\nRisk: Background Docker image downloads can consume significant network bandwidth and disk space. <br>\nMitigation: Install only when image downloading is desired, use explicit Docker image requests, and monitor disk and network usage. <br>\nRisk: Private registry passwords may be exposed through terminal prompting. <br>\nMitigation: Avoid entering private registry passwords unless the prompt is changed to hidden input, or use limited-scope pull-only credentials. <br>\nRisk: A stale local config path can point the skill at the wrong script location after installation. <br>\nMitigation: Reset the config path after install before running downloads. <br>\n\n\n## Reference(s): <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [Files, Shell commands, Configuration, Guidance] <br>\n**Output Format:** [Markdown status updates with shell commands and generated Docker image tar files] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [Creates tar archives under an images directory and reports docker load commands after download completion.] <br>\n\n## Skill Version(s): <br>\n1.3.0 (source: server release metadata and script VERSION) <br>\n\n## Ethical Considerations: <br>\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment. <br>\n\nFile v1.3.0:config.json\n\n{\n  \"mode\": \"proxy\",\n  \"proxy_address\": \"127.0.0.1:7890\",\n  \"mirror_url\": \"\",\n  \"arch\": \"\",\n  \"script_dir\": \"/Users/zhao/.openclaw/workspace/skills/docker-image-puller/scripts\",\n  \"version\": 1\n}\n\nArchive v1.2.1: 4 files, 9145 bytes\n\nFiles: config.json (129b), scripts/docker_image_puller.py (21831b), SKILL.md (3024b), _meta.json (138b)\n\nFile v1.2.1:SKILL.md\n\n---\nname: docker-image-puller\ndescription: 使用 Python 脚本下载 Docker 镜像并打包为 tar 文件。当用户说\"下载镜像\"、\"拉取镜像\"、\"pull xxx\"、\"帮我下载 nginx 镜像\"等触发此技能。支持 SOCKS5 代理直连下载（推荐）和国内镜像站加速两种模式。\n---\n\n# Docker 镜像拉取工具\n\n从任意 Docker Registry 拉取镜像，打包为 `.tar` 文件供离线 `docker load` 使用。\n\n## 资源文件\n\n- 脚本：`scripts/docker_image_puller.py`\n- 配置：`config.json`（首次运行时引导生成）\n\n## 首次使用 — 配置引导\n\n检查 `config.json` 中 `arch` 字段：\n- 若为空（`\"\"` 或不存在），引导用户完成首次配置：\n  1. **下载方式** — 代理下载（推荐，最稳定）或镜像加速\n  2. **代理地址**（代理模式）— 默认 `127.0.0.1:7890`\n  3. **镜像站地址**（镜像模式）— 或让脚本运行时显示推荐列表\n  4. **目标架构** — `amd64`（x86 服务器，默认）或 `arm64v8`（ARM 服务器）\n- 若 `arch` 已有值，跳过引导，直接使用该配置\n\n`script_dir` 自动解析为技能自带的 `scripts/` 目录。\n\n### config.json 结构\n\n```json\n{\n  \"mode\": \"proxy\",\n  \"proxy_address\": \"127.0.0.1:7890\",\n  \"mirror_url\": \"\",\n  \"arch\": \"\",\n  \"script_dir\": \"\",\n  \"version\": 1\n}\n```\n\n`arch` 为空时触发首次引导。\n\n## 执行流程\n\n### 1. 读取配置，构建命令\n\n读取 `config.json`，根据 mode 构建命令：\n\n**代理模式：**\n```bash\ncd \"<script_dir>\" && printf 'n\\nn' | python3 docker_image_puller.py -i \"<镜像名>\" --socks5 --socks5-proxy \"<代理地址>\" -a \"<架构>\"\n```\n\n**镜像加速模式：**\n```bash\ncd \"<script_dir>\" && printf 'y\\ny\\n<镜像站地址>' | python3 docker_image_puller.py -i \"<镜像名>\" -a \"<架构>\"\n```\n\n### 2. Sub-Agent 后台下载\n\n使用 `sessions_spawn` 启动隔离子任务，不阻塞主会话：\n\n```\nsessions_spawn(\n  task=\"读取 <skill-dir>/config.json 获取配置。为镜像 '<镜像名>' 构建下载命令。用 exec 执行（background=true, timeout=600）。每 30 秒用 process 轮询进度。完成后报告 tar 路径和 docker load 命令。失败则报告具体原因。\",\n  mode=\"run\",\n  runtime=\"subagent\",\n  timeoutSeconds=900\n)\n```\n\n立即回复用户：\n> 📥 已启动后台下载 `<镜像名>`（架构：<架构>）... 完成后会通知你，可继续其他操作。\n\n### 3. 结果报告\n\n| 结果 | 处理方式 |\n|------|---------|\n| ✅ 成功 | 报告 tar 文件路径 + `docker load -i <路径>` |\n| ⏱ 超时 | \"下载超时，请检查网络或代理\" |\n| 🔒 认证失败 401 | 请用户提供仓库用户名/密码 |\n| 🌐 网络错误 | 报告具体 HTTP 错误码和失败 URL |\n| 💾 磁盘不足 | 提醒用户清理磁盘空间 |\n\n## 补充说明\n\n- 输出路径：`<script_dir>/images/<仓库>_<标签>_<架构>.tar`\n- 脚本运行完毕后自动清理 `tmp/` 临时目录，无需手动处理\n- `config.json` 跨次复用，用户可随时要求切换下载模式或指定架构\n\nFile v1.2.1:_meta.json\n\n{\n  \"ownerId\": \"kn708zphbthck6epdfhqrap4xd8293d5\",\n  \"slug\": \"docker-image-puller\",\n  \"version\": \"1.2.1\",\n  \"publishedAt\": 1778559494482\n}\n\nFile v1.2.1:config.json\n\n{\n  \"mode\": \"proxy\",\n  \"proxy_address\": \"127.0.0.1:7890\",\n  \"mirror_url\": \"\",\n  \"arch\": \"\",\n  \"script_dir\": \"\",\n  \"version\": 1\n}\n\nArchive v1.2.0: 4 files, 9146 bytes\n\nFiles: config.json (129b), scripts/docker_image_puller.py (21831b), SKILL.md (3024b), _meta.json (138b)\n\nFile v1.2.0:SKILL.md\n\n---\nname: docker-image-puller\ndescription: 使用 Python 脚本下载 Docker 镜像并打包为 tar 文件。当用户说\"下载镜像\"、\"拉取镜像\"、\"pull xxx\"、\"帮我下载 nginx 镜像\"等触发此技能。支持 SOCKS5 代理直连下载（推荐）和国内镜像站加速两种模式。\n---\n\n# Docker 镜像拉取工具\n\n从任意 Docker Registry 拉取镜像，打包为 `.tar` 文件供离线 `docker load` 使用。\n\n## 资源文件\n\n- 脚本：`scripts/docker_image_puller.py`\n- 配置：`config.json`（首次运行时引导生成）\n\n## 首次使用 — 配置引导\n\n检查 `config.json` 中 `arch` 字段：\n- 若为空（`\"\"` 或不存在），引导用户完成首次配置：\n  1. **下载方式** — 代理下载（推荐，最稳定）或镜像加速\n  2. **代理地址**（代理模式）— 默认 `127.0.0.1:7890`\n  3. **镜像站地址**（镜像模式）— 或让脚本运行时显示推荐列表\n  4. **目标架构** — `amd64`（x86 服务器，默认）或 `arm64v8`（ARM 服务器）\n- 若 `arch` 已有值，跳过引导，直接使用该配置\n\n`script_dir` 自动解析为技能自带的 `scripts/` 目录。\n\n### config.json 结构\n\n```json\n{\n  \"mode\": \"proxy\",\n  \"proxy_address\": \"127.0.0.1:7890\",\n  \"mirror_url\": \"\",\n  \"arch\": \"\",\n  \"script_dir\": \"\",\n  \"version\": 1\n}\n```\n\n`arch` 为空时触发首次引导。\n\n## 执行流程\n\n### 1. 读取配置，构建命令\n\n读取 `config.json`，根据 mode 构建命令：\n\n**代理模式：**\n```bash\ncd \"<script_dir>\" && printf 'n\\nn' | python3 docker_image_puller.py -i \"<镜像名>\" --socks5 --socks5-proxy \"<代理地址>\" -a \"<架构>\"\n```\n\n**镜像加速模式：**\n```bash\ncd \"<script_dir>\" && printf 'y\\ny\\n<镜像站地址>' | python3 docker_image_puller.py -i \"<镜像名>\" -a \"<架构>\"\n```\n\n### 2. Sub-Agent 后台下载\n\n使用 `sessions_spawn` 启动隔离子任务，不阻塞主会话：\n\n```\nsessions_spawn(\n  task=\"读取 <skill-dir>/config.json 获取配置。为镜像 '<镜像名>' 构建下载命令。用 exec 执行（background=true, timeout=600）。每 30 秒用 process 轮询进度。完成后报告 tar 路径和 docker load 命令。失败则报告具体原因。\",\n  mode=\"run\",\n  runtime=\"subagent\",\n  timeoutSeconds=900\n)\n```\n\n立即回复用户：\n> 📥 已启动后台下载 `<镜像名>`（架构：<架构>）... 完成后会通知你，可继续其他操作。\n\n### 3. 结果报告\n\n| 结果 | 处理方式 |\n|------|---------|\n| ✅ 成功 | 报告 tar 文件路径 + `docker load -i <路径>` |\n| ⏱ 超时 | \"下载超时，请检查网络或代理\" |\n| 🔒 认证失败 401 | 请用户提供仓库用户名/密码 |\n| 🌐 网络错误 | 报告具体 HTTP 错误码和失败 URL |\n| 💾 磁盘不足 | 提醒用户清理磁盘空间 |\n\n## 补充说明\n\n- 输出路径：`<script_dir>/images/<仓库>_<标签>_<架构>.tar`\n- 脚本运行完毕后自动清理 `tmp/` 临时目录，无需手动处理\n- `config.json` 跨次复用，用户可随时要求切换下载模式或指定架构\n\nFile v1.2.0:_meta.json\n\n{\n  \"ownerId\": \"kn708zphbthck6epdfhqrap4xd8293d5\",\n  \"slug\": \"docker-image-puller\",\n  \"version\": \"1.2.0\",\n  \"publishedAt\": 1778486863369\n}\n\nFile v1.2.0:config.json\n\n{\n  \"mode\": \"proxy\",\n  \"proxy_address\": \"127.0.0.1:7890\",\n  \"mirror_url\": \"\",\n  \"arch\": \"\",\n  \"script_dir\": \"\",\n  \"version\": 1\n}\n\nArchive v1.1.0: 4 files, 9056 bytes\n\nFiles: config.json (134b), scripts/docker_image_puller.py (21831b), SKILL.md (2876b), _meta.json (138b)\n\nFile v1.1.0:SKILL.md\n\n---\nname: docker-image-puller\ndescription: 使用 Python 脚本下载 Docker 镜像并打包为 tar 文件。当用户说\"下载镜像\"、\"拉取镜像\"、\"pull xxx\"、\"帮我下载 nginx 镜像\"等触发此技能。支持 SOCKS5 代理直连下载（推荐）和国内镜像站加速两种模式。\n---\n\n# Docker 镜像拉取工具\n\n从任意 Docker Registry 拉取镜像，打包为 `.tar` 文件供离线 `docker load` 使用。\n\n## 资源文件\n\n- 脚本：`scripts/docker_image_puller.py`\n- 配置：`config.json`（首次运行时自动生成）\n\n## 首次使用 — 配置引导\n\n若 `config.json` 不存在，询问用户以下信息：\n\n1. **下载方式** — 代理下载（推荐，最稳定）或镜像加速\n2. **代理地址**（代理模式）— 默认 `127.0.0.1:7890`\n3. **镜像站地址**（镜像模式）— 或让脚本运行时显示推荐列表\n4. **架构** — 默认 `amd64`\n\n将答案保存为 `config.json`。`script_dir` 自动解析为技能自带的 `scripts/` 目录。\n\n### config.json 结构\n\n```json\n{\n  \"mode\": \"proxy\",\n  \"proxy_address\": \"127.0.0.1:7890\",\n  \"mirror_url\": \"\",\n  \"arch\": \"amd64\",\n  \"script_dir\": \"\",\n  \"version\": 1\n}\n```\n\n## 执行流程\n\n### 1. 读取配置，构建命令\n\n读取 `config.json`。若 `script_dir` 为空，自动解析为技能自带的 `scripts/` 目录。\n\n**代理模式：**\n```bash\ncd \"<script_dir>\" && printf 'n\\nn' | python3 docker_image_puller.py -i \"<镜像名>\" --socks5 --socks5-proxy \"<代理地址>\" -a \"<架构>\"\n```\n\n**镜像加速模式：**\n```bash\ncd \"<script_dir>\" && printf 'y\\ny\\n<镜像站地址>' | python3 docker_image_puller.py -i \"<镜像名>\" -a \"<架构>\"\n```\n\n### 2. Sub-Agent 后台下载\n\n使用 `sessions_spawn` 启动隔离子任务执行下载，不阻塞主会话：\n\n```\nsessions_spawn(\n  task=\"读取 <skill-dir>/config.json 获取配置。为镜像 '<镜像名>' 构建下载命令。用 exec 执行（background=true, timeout=600）。每 30 秒用 process 轮询进度。完成后报告 tar 路径和 docker load 命令。失败则报告具体原因。\",\n  mode=\"run\",\n  runtime=\"subagent\",\n  timeoutSeconds=900\n)\n```\n\n立即回复用户：\n> 📥 已启动后台下载 `<镜像名>`... 完成后会通知你，可继续其他操作。\n\n### 3. 结果报告\n\n| 结果 | 处理方式 |\n|------|---------|\n| ✅ 成功 | 报告 tar 文件路径 + `docker load -i <路径>` |\n| ⏱ 超时（600s） | \"下载超时，请检查网络或代理\" |\n| 🔒 认证失败 401 | 请用户提供仓库用户名/密码 |\n| 🌐 网络错误 | 报告具体 HTTP 错误码和失败 URL |\n| 💾 磁盘不足 | 提醒用户清理磁盘空间 |\n\n## 补充说明\n\n- 输出路径：`<script_dir>/images/<仓库>_<标签>_<架构>.tar`\n- 脚本运行完毕后自动清理 `tmp/` 临时目录，无需手动处理\n- `config.json` 跨次复用，用户可随时要求切换下载模式\n\nFile v1.1.0:_meta.json\n\n{\n  \"ownerId\": \"kn708zphbthck6epdfhqrap4xd8293d5\",\n  \"slug\": \"docker-image-puller\",\n  \"version\": \"1.1.0\",\n  \"publishedAt\": 1778485617029\n}\n\nFile v1.1.0:config.json\n\n{\n  \"mode\": \"proxy\",\n  \"proxy_address\": \"127.0.0.1:7890\",\n  \"mirror_url\": \"\",\n  \"arch\": \"amd64\",\n  \"script_dir\": \"\",\n  \"version\": 1\n}\n\nArchive v1.0.0: 4 files, 8932 bytes\n\nFiles: config.json (134b), scripts/docker_image_puller.py (21831b), SKILL.md (2744b), _meta.json (138b)\n\nFile v1.0.0:SKILL.md\n\n---\nname: docker-image-puller\ndescription: Download Docker images as tar files using a bundled Python script. Use when the user asks to download, pull, or save a Docker image (e.g., \"下载 nginx 镜像\", \"pull redis:7\", \"拉取 xxx 镜像\", \"帮我下载 docker 镜像\"). Supports SOCKS5 proxy and mirror acceleration.\n---\n\n# Docker Image Puller\n\nPull Docker images from any registry and save as `.tar` files for offline `docker load`.\n\n## Resources\n\n- Script: `scripts/docker_image_puller.py`\n- Config: `config.json` (auto-generated on first run)\n\n## First Run — Setup\n\nIf `config.json` does not exist, ask the user:\n\n1. **Download mode** — proxy (recommended, most stable) or mirror acceleration\n2. **Proxy address** (if proxy mode) — default `127.0.0.1:7890`\n3. **Mirror URL** (if mirror mode) — or let script show recommendations\n4. **Architecture** — default `amd64`\n\nSave answers to `config.json`. The `script_dir` auto-resolves to this skill's `scripts/` directory.\n\n### config.json schema\n\n```json\n{\n  \"mode\": \"proxy\",\n  \"proxy_address\": \"127.0.0.1:7890\",\n  \"mirror_url\": \"\",\n  \"arch\": \"amd64\",\n  \"script_dir\": \"\",\n  \"version\": 1\n}\n```\n\n## Workflow\n\n### 1. Read config, build command\n\nRead `config.json`. Resolve `script_dir` to the skill's `scripts/` directory if empty. Build the command based on mode:\n\n**Proxy mode:**\n```bash\ncd \"<script_dir>\" && printf 'n\\nn' | python3 docker_image_puller.py -i \"<image>\" --socks5 --socks5-proxy \"<proxy_address>\" -a \"<arch>\"\n```\n\n**Mirror mode:**\n```bash\ncd \"<script_dir>\" && printf 'y\\ny\\n<mirror_url>' | python3 docker_image_puller.py -i \"<image>\" -a \"<arch>\"\n```\n\n### 2. Run in sub-agent (background)\n\nSpawn an isolated sub-agent to handle the download:\n\n```\nsessions_spawn(\n  task=\"Read <skill-dir>/config.json. Build the download command for image '<image>'. Execute with exec (background=true, timeout=600). Poll every 30s with process tool. On completion, report: tar file path + docker load command. On error, report specific cause.\",\n  mode=\"run\",\n  runtime=\"subagent\",\n  timeoutSeconds=900\n)\n```\n\nReply immediately:\n> 📥 已启动后台下载 `<image>`... 完成后会通知你，可继续其他操作。\n\n### 3. Report results\n\n| Outcome | Action |\n|---------|--------|\n| ✅ Success | Report tar path + `docker load -i <path>` |\n| ⏱ Timeout | \"下载超时，请检查网络或代理\" |\n| 🔒 Auth 401 | Ask user for registry username/password |\n| 🌐 Network error | Report specific HTTP error and URL |\n| 💾 Disk full | Advise user to free space |\n\n## Notes\n\n- Output: `<script_dir>/images/<repo>_<tag>_<arch>.tar`\n- Script auto-cleans `tmp/` after each run — no manual cleanup needed\n- `config.json` is reused across runs; user can request mode change anytime\n\nFile v1.0.0:_meta.json\n\n{\n  \"ownerId\": \"kn708zphbthck6epdfhqrap4xd8293d5\",\n  \"slug\": \"docker-image-puller\",\n  \"version\": \"1.0.0\",\n  \"publishedAt\": 1778485228278\n}\n\nFile v1.0.0:config.json\n\n{\n  \"mode\": \"proxy\",\n  \"proxy_address\": \"127.0.0.1:7890\",\n  \"mirror_url\": \"\",\n  \"arch\": \"amd64\",\n  \"script_dir\": \"\",\n  \"version\": 1\n}","readmeExcerpt":"Skill: docker-image-puller Owner: zhaohaixin Summary: 使用 Python 脚本下载 Docker 镜像并打包为 tar 文件。当用户说\"下载镜像\"、\"拉取镜像\"、\"pull xxx\"、\"帮我下载 nginx 镜像\"等触发此技能。支持 SOCKS5 代理直连下载（推荐）和国内镜像站加速两种模式。 Tags: latest:1.3.1 Version history: v1.3.1 | 2026-08-06T05:58:57.254Z | user 关联 GitHub 源码仓库（zhaohaixin/docker-image-puller），建立正规版本管理流程 v1.3.0 | 2026-05-17T15:40:12.430Z | auto **安全增强和执行模式更新** - 镜像下载命令切换为参数数组方式 (shell=false)，防止命令注入风险。 - 明确要求 Dock","codeSnippets":[],"executableExamples":[{"language":"json","snippet":"{\n  \"mode\": \"proxy\",\n  \"proxy_address\": \"127.0.0.1:7890\",\n  \"mirror_url\": \"\",\n  \"arch\": \"\",\n  \"script_dir\": \"\",\n  \"version\": 1\n}"},{"language":"python","snippet":"exec(\n  command=\"python3 docker_image_puller.py -i '<image>' --socks5 --socks5-proxy '<proxy>' -a '<arch>'\",\n  workdir=\"<script_dir>\"\n)"},{"language":"python","snippet":"exec(\n  command=\"printf 'y\\\\ny\\\\n<mirror>' | python3 docker_image_puller.py -i '<image>' -a '<arch>'\",\n  workdir=\"<script_dir>\"\n)"},{"language":"text","snippet":"sessions_spawn(\n  task=\"读取 <skill-dir>/config.json 获取配置。为镜像 '<镜像名>' 构建下载命令。用 exec 执行（background=true, timeout=600）。每 30 秒用 process 轮询进度。完成后报告 tar 路径和 docker load 命令。失败则报告具体原因。\",\n  mode=\"run\",\n  runtime=\"subagent\",\n  timeoutSeconds=900\n)"},{"language":"json","snippet":"{\n  \"mode\": \"proxy\",\n  \"proxy_address\": \"127.0.0.1:7890\",\n  \"mirror_url\": \"\",\n  \"arch\": \"\",\n  \"script_dir\": \"\",\n  \"version\": 1\n}"},{"language":"python","snippet":"exec(\n  command=\"python3 docker_image_puller.py -i '<image>' --socks5 --socks5-proxy '<proxy>' -a '<arch>'\",\n  workdir=\"<script_dir>\"\n)"}],"parameters":null,"dependencies":[],"permissions":[],"extractedFiles":[{"path":"SKILL.md","content":"---\nname: docker-image-puller\ndescription: 使用 Python 脚本下载 Docker 镜像并打包为 tar 文件。当用户说\"下载镜像\"、\"拉取镜像\"、\"pull xxx\"、\"帮我下载 nginx 镜像\"等触发此技能。支持 SOCKS5 代理直连下载（推荐）和国内镜像站加速两种模式。\n---\n\n# Docker 镜像拉取工具\n\n从任意 Docker Registry 拉取镜像，打包为 `.tar` 文件供离线 `docker load` 使用。\n\n## 资源文件\n\n- 脚本：`scripts/docker_image_puller.py`\n- 配置：`config.json`（首次运行时引导生成）\n\n## 首次使用 — 配置引导\n\n检查 `config.json` 中 `arch` 字段：\n- 若为空（`\"\"` 或不存在），引导用户完成首次配置：\n  1. **下载方式** — 代理下载（推荐，最稳定）或镜像加速\n  2. **代理地址**（代理模式）— 默认 `127.0.0.1:7890`\n  3. **镜像站地址**（镜像模式）— 或让脚本运行时显示推荐列表\n  4. **目标架构** — `amd64`（x86 服务器，默认）或 `arm64v8`（ARM 服务器）\n- 若 `arch` 已有值，跳过引导，直接使用该配置\n\n`script_dir` 自动解析为技能自带的 `scripts/` 目录。\n\n### config.json 结构\n\n```json\n{\n  \"mode\": \"proxy\",\n  \"proxy_address\": \"127.0.0.1:7890\",\n  \"mirror_url\": \"\",\n  \"arch\": \"\",\n  \"script_dir\": \"\",\n  \"version\": 1\n}\n```\n\n`arch` 为空时触发首次引导。\n\n## 执行流程\n\n### 1. 读取配置，构建命令（安全执行）\n\n读取 `config.json`，根据 mode 构建命令。使用 `exec` 的 `shell=false`（参数数组）方式调用，避免 shell 注入。\n\n**代理模式：**\n```python\nexec(\n  command=\"python3 docker_image_puller.py -i '<image>' --socks5 --socks5-proxy '<proxy>' -a '<arch>'\",\n  workdir=\"<script_dir>\"\n)\n```\n\n**镜像加速模式：**\n```python\nexec(\n  command=\"printf 'y\\\\ny\\\\n<mirror>' | python3 docker_image_puller.py -i '<image>' -a '<arch>'\",\n  workdir=\"<script_dir>\"\n)\n```\n\n> ⚠️ 镜像名必须为合法 Docker 镜像引用（仅含字母、数字、`/`、`:`、`-`、`.`、`_`），包含其他字符时先向用户确认。\n\n### 2. Sub-Agent 后台下载\n\n使用 `sessions_spawn` 启动隔离子任务，不阻塞主会话：\n\n```\nsessions_spawn(\n  task=\"读取 <skill-dir>/config.json 获取配置。为镜像 '<镜像名>' 构建下载命令。用 exec 执行（background=true, timeout=600）。每 30 秒用 process 轮询进度。完成后报告 tar 路径和 docker load 命令。失败则报告具体原因。\",\n  mode=\"run\",\n  runtime=\"subagent\",\n  timeoutSeconds=900\n)\n```\n\n立即回复用户：\n> 📥 已启动后台下载 `<镜像名>`（架构：<架构>）... 完成后会通知你，可继续其他操作。\n\n### 3. 结果报告\n\n| 结果 | 处理方式 |\n|------|---------|\n| ✅ 成功 | 报告 tar 文件路径 + `docker load -i <路径>` |\n| ⏱ 超时 | \"下载超时，请检查网络或代理\" |\n| 🔒 认证失败 401 | 请用户提供仓库用户名/密码 |\n| 🌐 网络错误 | 报告具体 HTTP 错误码和失败 URL |\n| 💾 磁盘不足 | 提醒用户清理磁盘空间 |\n\n## 补充说明\n\n- **安全**：脚本启用 HTTPS 证书校验（`verify=True`），不再禁用 TLS 验证。执行镜像下载时使用参数数组而非 shell 拼接，防止命令注入。\n- 输出路径：`<script_dir>/images/<仓库>_<标签>_<架构>.tar`\n- 脚本运行完毕后自动清理 `tmp/` 临时目录，无需手动处理\n- `config.json` 跨次复用，用户可随时要求切换下载模式或指定架构"},{"path":"_meta.json","content":"{\n  \"ownerId\": \"kn708zphbthck6epdfhqrap4xd8293d5\",\n  \"slug\": \"docker-image-puller\",\n  \"version\": \"1.3.1\",\n  \"publishedAt\": 1785995937254\n}"},{"path":"skill-card.md","content":"## Description:\n\nDownloads Docker images from registries and packages them as tar files for offline docker load use, with SOCKS5 proxy and mirror-based download modes.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[zhaohaixin](https://clawhub.ai/user/zhaohaixin)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nDevelopers and operations engineers use this skill to fetch Docker images for offline transfer or environments where direct docker pull access is unreliable. It helps configure proxy or mirror download settings, choose a target architecture, run the pull workflow, and report the generated tar path and docker load command.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: Registry credentials or private registry details could be exposed through command-line arguments or debug output.\n\nMitigation: Avoid passing registry passwords on the command line and avoid debug mode when working with private registries.\n\nRisk: Downloaded image content may be untrusted or altered before it is loaded into Docker.\n\nMitigation: Verify downloaded images independently before loading or running them.\n\nRisk: Mirror-mode execution uses shell-style pipelines with configuration-derived values.\n\nMitigation: Review or update the mirror-mode execution path so it avoids shell pipelines with interpolated configuration.\n\n## Reference(s):\n\n- [ClawHub skill page](https://clawhub.ai/zhaohaixin/skills/docker-image-puller)\n\n## Skill Output:\n\n**Output Type(s):** [text, markdown, shell commands, configuration, files, guidance]\n\n**Output Format:** [Markdown or plain text status reports with inline shell commands and generated Docker image tar paths]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Successful runs produce Docker image tar archives intended for docker load.]\n\n## Skill Version(s):\n\n1.3.1 (source: ClawHub release evidence)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment."},{"path":"config.json","content":"{\n  \"mode\": \"proxy\",\n  \"proxy_address\": \"127.0.0.1:7890\",\n  \"mirror_url\": \"\",\n  \"arch\": \"\",\n  \"script_dir\": \"/Users/zhao/.openclaw/workspace/skills/docker-image-puller/scripts\",\n  \"version\": 1\n}"}],"languages":[],"docsSourceLabel":"CLAWHUB","editorialOverview":"使用 Python 脚本下载 Docker 镜像并打包为 tar 文件。当用户说\"下载镜像\"、\"拉取镜像\"、\"pull xxx\"、\"帮我下载 nginx 镜像\"等触发此技能。支持 SOCKS5 代理直连下载（推荐）和国内镜像站加速两种模式。 Skill: docker-image-puller Owner: zhaohaixin Summary: 使用 Python 脚本下载 Docker 镜像并打包为 tar 文件。当用户说\"下载镜像\"、\"拉取镜像\"、\"pull xxx\"、\"帮我下载 nginx 镜像\"等触发此技能。支持 SOCKS5 代理直连下载（推荐）和国内镜像站加速两种模式。 Tags: latest:1.3.1 Version history: v1.3.1 | 2026-08-06T05:58:57.254Z | user 关联 GitHub 源码仓库（zhaohaixin/docker-image-puller），建立正规版本管理流程 v1.3.0 | 2026-05-17T15:40:12.430Z | auto **安全增强和执行模式更新** - 镜像下载命令切换为参数数组方式 (shell=false)，防止命令注入风险。 - 明确要求 Dock","editorialQuality":{"score":100,"threshold":65,"status":"ready","wordCount":885,"uniquenessScore":57,"reasons":[]}},"media":{"evidence":{"source":"no-media","verified":false,"confidence":"low","updatedAt":"2026-10-11T09:36:36.099Z","emptyReason":"No screenshots, media assets, or demo links are available."},"primaryImageUrl":null,"mediaAssetCount":0,"assets":[],"demoUrl":null},"ownerResources":{"evidence":{"source":"unclaimed","verified":false,"confidence":"low","updatedAt":"2026-10-11T09:36:36.099Z","emptyReason":"This page has not been claimed by the agent owner."},"hasCustomPage":false,"customPageUpdatedAt":null,"customLinks":[],"structuredLinks":{"docsUrl":null,"demoUrl":null,"supportUrl":null,"pricingUrl":null,"statusUrl":null},"customPage":null},"relatedAgents":{"evidence":{"source":"protocol-neighbors","verified":false,"confidence":"medium","updatedAt":"2026-10-11T14:13:38.657Z","emptyReason":null},"items":[{"id":"8ebccd8e-3863-4187-8355-c3f14e1f9edf","entityType":"agent","canonicalPath":"/agent/iofficeai-aionui","slug":"iofficeai-aionui","name":"AionUi","description":"Free, local, open-source 24/7 Cowork app and OpenClaw for Gemini CLI, Claude Code, Codex, OpenCode, Qwen Code, Goose CLI, Auggie, and more | 🌟 Star if you like it!","url":"https://github.com/iOfficeAI/AionUi","homepage":"https://www.aionui.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-10-09T19:11:12.944Z","createdAt":"2026-02-25T03:38:16.584Z","downloads":null},{"id":"b917f68a-ebff-438e-84f8-3f4b2494c0bc","entityType":"agent","canonicalPath":"/agent/activepieces-activepieces","slug":"activepieces-activepieces","name":"activepieces","description":"AI Agents & MCPs & AI Workflow Automation • (~400 MCP servers for AI agents) • AI Automation / AI Agent with MCPs • AI Workflows & AI Agents • MCPs for AI Agents","url":"https://github.com/activepieces/activepieces","homepage":"https://www.activepieces.com","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-15T02:22:12.426Z","createdAt":"2026-02-25T03:38:12.412Z","downloads":null},{"id":"5cb26759-3a39-483f-94cf-276a98c13bb8","entityType":"agent","canonicalPath":"/agent/cherryhq-cherry-studio","slug":"cherryhq-cherry-studio","name":"cherry-studio","description":"AI productivity studio with smart chat, autonomous agents, and 300+ assistants. Unified access to frontier LLMs","url":"https://github.com/CherryHQ/cherry-studio","homepage":"https://cherry-ai.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-11T14:38:40.986Z","createdAt":"2026-02-25T03:38:19.379Z","downloads":null},{"id":"6f6582d0-5d76-4f0f-b81d-86520247950b","entityType":"agent","canonicalPath":"/agent/copilotkit-copilotkit","slug":"copilotkit-copilotkit","name":"CopilotKit","description":"The Frontend for Agents & Generative UI. React + Angular","url":"https://github.com/CopilotKit/CopilotKit","homepage":"https://docs.copilotkit.ai","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-03-25T09:50:57.846Z","createdAt":"2026-02-25T03:39:14.617Z","downloads":null}],"links":{"hub":"/agent","source":"/agent/source/clawhub","protocols":[{"label":"OpenClaw","href":"/agent/protocol/openclew"}]}}}