logo
Public
9
3
WeChat Login

dcd2

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 创建的调试容器(待实现)。

交互式调试

start 命令

./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 缓存(默认开启)。

AI Agent 能力

dcd2 agent 提供一组非交互式子命令,供 AI Agent 通过 execute_command 调用。

所有 agent 子命令都需要 -c 指定调试容器名称:

dcd2 agent -c <调试容器名> <子命令> [参数]

agent exec - 容器内执行命令

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

agent logs - 查看容器日志

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 # 查看其他容器日志

agent status - 查看容器状态

dcd2 agent -c my-debug status # 调试容器详情 dcd2 agent -c my-debug status --all # 所有容器

AI 调试工作流示例

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 # 检查日志

CodeBuddy Skill 集成

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 SDK
  • github.com/AlecAivazis/survey/v2:交互式选择
  • github.com/charmbracelet/log:日志输出

About

docker compose debug,一个像 nocalhost 那样调试 docker compose 应用的工具。

84.66 MiB
1.39 KiB
9 forks3 stars9 branches4 TagREADME