使用示例(通过Skill接入第三方Agent)
工作目录
arm_builds_<YYYYMMDD>/ ├── dockerfiles/<project>/ # 生成的 Dockerfile.arm64 + 原文件备份 ├── analysis/<project>/ # 无 Dockerfile 场景的采集产物 + 决策矩阵 ├── build_reports/ # 单项目报告 <project>.json + 总览报告 _summary.json └── _build_context/<project>/ # 离线提取的内网资源
操作步骤
以使用OpenCode迁移有Dockerfile的x86镜像至ARM架构为例。
使用Skill进行迁移的过程中,需用户通过本地配置文件或在Agent交互中提供数据库或服务器的用户名和密码连接源数据库或源服务器,可能存在一定安全风险,为保障用户数据安全,使用后请及时删除配置文件中的密码。
迁移过程中不对用户名和密码做存储操作,仅作为迁移流程中的一次性使用。
- 已在OpenCode配置好容器迁移的Skill。
容器迁移的Skill可在开源仓获取,配置方式可参考为第三方Agent配置Skill。
- 打开OpenCode输入提示词。已在/home/cmake-app目录准备Dockerfile文件和源码文件。
把/home/cmake-app下面的x86镜像迁移到arm
返回信息:
+ Thought: 2.0s - Skill "docker-image-migration" - Read . + Thought: 1.2s 项目有 Dockerfile,属于"有 Dockerfile 场景"。让我先收集项目信息和加载相关 skill。... ... ... ... 现在开始执行启动门禁检查。先并行检查环境和网络。 ... ... ... # Todos [*] 启动门禁检查 [ ] 阶段1: 解析 x86 Dockerfile [ ] 阶段2: 生成迁移决策表 [ ] 阶段3: 输出 ARM64 Dockerfile [ ] 阶段4: 构建验证 [ ] 阶段5: 运行测试与固化报告 + Thought: 443ms 现在验证 ubuntu:22.04 是否有 linux/arm64 manifest。 ... ... ...
- (可选)确认信息。
Skill启动后会自动按流程执行,解析完成Dockerfile后,以下问题可能需要用户进行确认。
- 信息补齐:当输入信息不完整时,Skill会暂停并通过交互提示引导用户按“最小输入清单”补齐所需信息(待迁移镜像、Dockerfile或采集产物路径、访问凭据等),信息补齐前不会继续执行。
- 门禁未通过:当配置占位符未替换、镜像不存在、Registry不可达等情况发生时,Skill会暂停并请求用户确认后再继续。
- DevKit安装决策:当未检测到DevKit时,Skill会提示用户选择:自动下载安装/手动提供安装路径/中止扫描。
- 镜像层采集确认:在无Dockerfile场景下,若ARM64主机无法采集镜像层信息,Skill会提示用户确认是否继续(继续可能导致构建结果不完整)。
- 查看迁移结果。
迁移完成后将显示每阶段说明、迁移过程中的关键步骤和主要输出文件的路径。
迁移生成的Docker镜像可在环境中使用docker images查看。
... ... ... 构建成功!现在进入阶段 5:运行测试。 # Todos [✓] 启动门禁检查 [✓] 阶段1:解析 x86 Dockerfile [✓] 阶段2:生成迁移决策表 [✓] 阶段3:输出 ARM64 Dockerfile [✓] 阶段4:构建验证 [*] 阶段5:运行测试与固化报告 ... ... ... 容器运行成功,二进制在 ARM64 上正常执行。现在生成报告。 → Read arm_builds_20260728/dockerfiles/cmake-app/Dockerfile.arm64 + Thought: 671ms # Wrote arm_builds_20260728/build_reports/cmake-app.json ... ... ... 迁移完成,结果 SUCCESS。 迁移总结 产出了什么 ┌────────────────────┬──────────────────────────────────────────────────────────────┐ │产出 │路径 │ │────────────────────│──────────────────────────────────────────────────────────────│ │ARM64 Dockerfile │arm_builds_20260728/dockerfiles/cmake-app/Dockerfile.arm64 │ │────────────────────│──────────────────────────────────────────────────────────────│ │原始 Dockerfile 备 │arm_builds_20260728/dockerfiles/cmake-app/Dockerfile.x86_orig │ │────────────────────│──────────────────────────────────────────────────────────────│ │单项目报告 │arm_builds_20260728/build_reports/cmake-app.json │ │────────────────────│──────────────────────────────────────────────────────────────│ │批次汇总报告 │arm_builds_20260728/build_reports/_summary.json │ │────────────────────│──────────────────────────────────────────────────────────────│ │构建镜像 │arm64-cmake-app:latest │ └────────────────────│──────────────────────────────────────────────────────────────┘ 关键变更 1. [KEEP-FROM-PUBLIC] - FROM 添加 --platform=linux/arm64, ubuntu:22.04 原生支持 arm64 2. [FIX-API-SOURCE] - ubuntu ARM64 默认 apt 源是 ports.ubuntu.com,全部替换为阿里云 mirrors.aliyun.com/ubuntu-indices 3. 代理注入 - Docker daemon 的 proxy 配置 (daemon.json) 未自动注入构建容器,导致容器内 DNS 解析完全失败(Temporary failure resolving),修复方式:在 Dockerfile 中通过 ENV 显式注入 HTTP_PROXY/HTTPS_PROXY 运行验证 /build/myapp -> "Hello from cmake-app!" ✓ CMD -> "cmake build complete" ✓ 注意事项 遇到容器内 DNS 不通的问题时,daemon.json 的 proxies 字段不保证注入到 BuildKit/legacy 构建容器中。在 Dockerfile 中手动设置代理环境变量,否则任何需要外网的操作都会失败。
- 查看项目报告文件。
总览报告_summary.json主要记录全量的工作流程。
{ "total": 1, "success": 1, "failed": 0, "worker_count": 1, "elapsed_min": 45, "projects": [ { "project": "cmake-app", "status": "SUCCESS", "worker_id": 1 } ], "interventions": [ { "worker_id": 1, "project": "cmake-app", "trigger": "BUILD_FAILED-DNS_RESOLUTION", "action": "Docker daemon proxy 配置未注入容器,手动在 Dockerfile 中通过 ENV 注入 HTTP_PROXY/HTTPS_PROXY;ubuntu ARM64 默认 apt 源为 ports.ubuntu.com,替换为阿里云 ubuntu-ports 镜像", "resolved": true } ], "timestamp": "2026-07-28T13:35:00Z" }项目报告<project>.json中显示迁移成功。
{ "project": "cmake-app", "status": "SUCCESS", "image": "arm64-cmake-app:latest", "build_status": "success", "docker_version": "Docker version 29.4.3, build 055a478", "buildkit_enabled": true, "build_command": "docker build --platform linux/arm64 -t arm64-cmake-app:latest -f arm_builds_20260728/dockerfiles/cmake-app/Dockerfile.arm64 cmake-app/", "test_status": "pass", "migration_mode": "IMAGE_MIG_SKILLSET", "retry_count": 3, ... ... ... }
输出产物
迁移完成后,工作目录的arm_builds_<YYYYMMDD>/下会生成以下关键产物:
文件 |
阶段 |
说明 |
|---|---|---|
Dockerfile.arm64 |
场景阶段 |
生成的ARM64 Dockerfile |
Dockerfile.x86_orig |
场景阶段 |
原Dockerfile备份(有Dockerfile场景) |
manifest.json/history.json/layer.json |
采集 |
无Dockerfile场景的镜像元数据采集产物 |
decision_matrix.md |
决策 |
无Dockerfile场景的分析决策矩阵 |
build_reports/<project>.json |
报告 |
单项目迁移报告 |
build_reports/_summary.json |
汇总 |
批次总览报告 |
父主题: 容器迁移