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