我把 AI Coding Agent 的 MCP 工具链放进容器里跑了一遍

最近团队在试 AI Coding Agent。最开始大家盯着的是模型:能不能读懂代码、能不能改 bug、能不能生成测试。

实际跑下来,第一个卡点不是模型,而是工具链。

Agent 要完成一个真实任务,通常需要调用浏览器、Git、数据库、文件系统、K8s 日志或内部 API。也就是说,它背后不只是一个聊天模型,而是一组 MCP Server 和工具容器。

我这次把工具链放进容器里跑了一遍,记录一下踩到的点。

工具链不是一个包

一个最小可用的 Coding Agent 工具链,至少会碰到这些组件:

组件 用途
Node/Python runtime 跑脚本、工具、适配器
Playwright / Browser 复现页面、截图、E2E
MCP Server 暴露工具能力
Gateway 管理工具调用入口
Git 工具 读仓库、生成 patch
K8s 工具 查 Pod、日志、事件

如果这些都装在个人电脑上,短期很快,长期很乱。版本、权限、网络、依赖都不可复现。

所以我更倾向于把工具链容器化。

第一件事:先拉镜像

我先不急着 compose up,而是按来源拆镜像:

bash 复制代码
docker pull docker.1ms.run/node:20-alpine
docker pull ghcr.1ms.run/github/github-mcp-server
docker pull mcr.1ms.run/playwright/mcp
docker pull k8s.1ms.run/pause:3.10

这里故意保留了不同来源:Docker Hub、GHCR、MCR、K8s。因为实际项目里,失败经常不是"Docker 坏了",而是其中一个上游来源卡住。

如果这一层不过,后面再调 Agent 没意义。

compose 先跑最小集

先写一个很小的 compose.yaml

yaml 复制代码
services:
  runner:
    image: docker.1ms.run/node:20-alpine
    working_dir: /workspace
    volumes:
      - ./workspace:/workspace:ro
    command: ["node", "--version"]

  browser:
    image: mcr.1ms.run/playwright/mcp
    ports:
      - "8931:8931"

  github-tool:
    image: ghcr.1ms.run/github/github-mcp-server
    environment:
      - GITHUB_TOKEN=${GITHUB_TOKEN}

先看配置:

bash 复制代码
docker compose config
docker compose pull
docker compose up -d

我不会一开始就把数据库、K8s、内部 API 都接进来。先让最小工具链跑起来,再逐个加能力。

工具权限从只读开始

Agent 一旦能调工具,权限就变成正经工程问题。

我把权限分成几档:

工具 默认策略
仓库 只读,写入通过 PR
浏览器 只允许访问测试环境
数据库 只读账号,优先样例库
文件系统 只挂载 workspace
K8s 只读 namespace

这一步会让 demo 慢一点,但能避免后面出现"Agent 到底改了什么"的黑盒问题。

K8s 环境要看事件

如果工具链要进 K8s,第一步不是看应用日志,而是看 Pod 事件。

bash 复制代码
kubectl describe pod <pod-name>
kubectl get events --sort-by=.lastTimestamp

如果看到 ImagePullBackOff,优先看镜像地址和节点网络。

如果镜像已经拉下来但容器反复重启,再看启动参数和工具配置。

这两个问题不要混在一起排。

为什么这事适合做成团队模板

AI Coding Agent 的工具链,一旦每个人都自己装,很快会变成玄学:

  • A 同事能跑,B 同事不能跑。
  • CI 里缺一个浏览器依赖。
  • K8s 节点拉不到某个工具镜像。
  • 数据库 token 在本地有,在 runner 里没有。
  • Agent 输出错误,但不知道是模型错还是工具错。

把工具链容器化之后,至少能把问题拆开:

  1. 镜像是否能拉取。
  2. 工具是否能启动。
  3. 权限是否足够。
  4. Agent 调用参数是否正确。
  5. 输出是否可复现。

我最后留下的检查脚本

bash 复制代码
#!/usr/bin/env bash
set -euo pipefail

images=(
  "docker.1ms.run/node:20-alpine"
  "ghcr.1ms.run/github/github-mcp-server"
  "mcr.1ms.run/playwright/mcp"
  "k8s.1ms.run/pause:3.10"
)

for image in "${images[@]}"; do
  echo "==> ${image}"
  docker pull "${image}"
done

docker compose config
docker compose pull

这段脚本不解决所有问题,但能把"工具链镜像能不能进入环境"这件事提前暴露出来。

小结

AI Coding Agent 真要进入团队,不能只看模型能力。

更现实的问题是:MCP 工具链怎么跑、浏览器自动化怎么隔离、镜像怎么预检、权限怎么收口、日志怎么留痕。

我的建议是先别追求一步到位。先把最小工具链容器化跑通,再把权限、日志、K8s 和 CI 逐步加上去。

Agent 会不会干活是一回事,它有没有一个稳定的工作台,是另一回事。

相关推荐
有梦不弃2 小时前
模块化单体架构设计方案:DDD + 六边形架构落地实践
后端·架构
江南十四行6 小时前
Spring框架核心(上)——IoC控制反转与DI依赖注入详解
java·后端·spring
IT_陈寒7 小时前
Redis缓存击穿把我坑惨了,原来这样设过期时间才靠谱
前端·人工智能·后端
妙码生花8 小时前
从 PHP 到 AI + Golang,程序员自救转型手记(五十二):管理员权限检查中间件,AI 随意放行预闯大祸
前端·后端·go
创安电气研究所8 小时前
用 Node.js 将变频器运行数据接入 MQTT
后端
董员外8 小时前
RAG 系统进化论(八):Agentic RAG(智能体式 RAG),从回答问题到完成任务
人工智能·后端·设计模式
大勇前进8 小时前
告别 div 满天飞,HTML5 语义化标签真的有必要用吗?
后端
小满zs8 小时前
Go语言第六章(结构体)
后端·go
属于自己的天空8 小时前
每天省去重复 Prompt:我用 Skills 把 CRUD 生成标准化了
前端·后端