dcd2 是一个用 Go 语言编写的命令行工具,旨在简化容器化微服务的本地调试过程。在微服务架构中,由于服务通常运行在隔离的容器环境中,并依赖大量的环境变量、端口映射和卷挂载,导致在本地直接调试变得非常复杂。
dcd2 通过以下方式解决这个问题:
捕获现有容器配置:它可以读取并保存一个正在运行的容器的所有关键配置(环境变量、端口映射、卷挂载、网络设置等)。
创建定制调试容器:利用捕获到的配置,工具会启动一个全新的容器。这个新容器会继承原始容器的所有必要配置,但其启动命令会被替换为一个交互式 Shell(例如 /bin/sh 或 /bin/bash)。
便捷进入调试环境:用户可以直接进入这个定制的调试容器,在其中手动启动服务并进行调试,无需担心环境配置不一致的问题。
AI Agent 能力:通过 dcd2 agent 子命令,AI 工具(如 CodeBuddy)可以非交互式地操作调试容器,包括执行命令、查看日志、编译运行、操作 dlv 调试器等。
直接安装
go install cnb.cool/looc/dcd@latest
从源码安装
git clone https://cnb.cool/looc/dcd.git cd dcd git checkout v2 go install
dcd2 支持以下命令:
dcd2 list:列出所有正在运行的 Docker 容器。dcd2 start: 交互式选择容器并启动调试环境。dcd2 create <container>: 指定容器创建调试环境。dcd2 agent: AI Agent 能力,提供非交互式操作调试容器的子命令。dcd2 clean:清理由 dcd2 创建的调试容器(待实现)。./dcd2 start [flags]
可用标志:
-n, --name string:指定调试容器的名称。如果未指定,将默认为 <原始容器名>-debug-<时间戳>。-s, --shell string:进入调试容器时使用的 Shell。默认为 /bin/bash。--rm:退出调试容器后自动删除它。默认启用。-m, --mount string:挂载到容器 /debug/code 的本地目录(默认当前目录)。-i, --image string:调试容器的镜像(默认 docker.cnb.cool/looc/dcdimage/golang:latest)。--go-cache: 启用 Go 缓存(默认开启)。dcd2 agent 提供一组非交互式子命令,供 AI Agent 通过 execute_command 调用。
所有 agent 子命令都需要 -c 指定调试容器名称:
dcd2 agent -c <调试容器名> <子命令> [参数]
dcd2 agent -c my-debug exec -- ls -la /debug/code
dcd2 agent -c my-debug exec -w /debug/code/git -- go test ./...
dcd2 agent -c my-debug exec -- env | grep DATABASE
dcd2 agent -c my-debug logs # 最近 100 行
dcd2 agent -c my-debug logs --tail 200 --grep "error" # 过滤 error
dcd2 agent -c my-debug logs --target vcs-server # 查看其他容器日志
dcd2 agent -c my-debug status # 调试容器详情
dcd2 agent -c my-debug status --all # 所有容器
1. 用户: dcd2 start --name my-debug # 创建调试容器 2. AI: dcd2 agent -c my-debug exec -- go build ./... # 编译检查 3. AI: dcd2 agent -c my-debug exec -- tail -20 /tmp/app.log # 检查日志
将 skills/dcd-agent/ 目录复制到你的项目 .codebuddy/skills/ 中,CodeBuddy 即可自动识别并使用 dcd agent 能力:
cp -r skills/dcd-agent /path/to/your/project/.codebuddy/skills/
dcd2/ ├── main.go # 程序入口 ├── cmd/ # Cobra 命令 │ ├── root.go # 根命令 │ ├── list.go # list 命令 │ ├── start.go # start 命令(交互式) │ ├── create.go # create 命令 │ ├── agent.go # agent 命令组入口 │ ├── agent_exec.go # agent exec 子命令 │ ├── agent_logs.go # agent logs 子命令 │ ├── agent_status.go # agent status 子命令 │ ├── agent_build.go # agent build 子命令 │ └── agent_dlv.go # agent dlv 子命令组 ├── internal/docker/ # Docker 操作 │ ├── client.go # Docker 客户端 │ ├── container.go # 容器操作(创建、exec attach 等) │ └── agent.go # Agent 操作(非交互式 exec、日志、构建、dlv) ├── skills/ # CodeBuddy Skill 定义 │ └── dcd-agent/ │ └── SKILL.md ├── go.mod ├── go.sum └── README.md
github.com/spf13/cobra:命令行框架github.com/docker/docker/client:Docker SDKgithub.com/AlecAivazis/survey/v2:交互式选择github.com/charmbracelet/log:日志输出