我把 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 会不会干活是一回事,它有没有一个稳定的工作台,是另一回事。

相关推荐
代码丰8 小时前
流式大模型调用中的首包监测:解决流式调用大模型的异步问题
后端
神奇小汤圆8 小时前
慢请求别急着先查慢 SQL(Redis 缓存雪崩把数据库打满)
后端
知彼解己8 小时前
LLM-based Planning:从后端视角理解 Agent 规划层
后端·golang·ai编程
覆东流8 小时前
Java开发环境搭建
java·开发语言·后端
yspwf8 小时前
用 NestJS 构建一个同时支持用户与订单的 gRPC 微服务
后端
DyLatte9 小时前
很多人把坚持,误以为成长
前端·后端·程序员
小马爱打代码9 小时前
SpringBoot + 延迟消息 + 时间轮:订单超时、优惠券过期等场景的高效实现方案
java·spring boot·后端
长大19889 小时前
MySQL 索引失效常见场景:开发优化必记要点
后端
达达尼昂9 小时前
AI Native 工程实践 : agent 自动化测试
前端·后端·架构
爱勇宝9 小时前
写给年轻程序员:别急着证明自己,也别太早放过自己
前端·后端·程序员