Docker MCP 管理工具
使用 Go、DDD 分层与 mark3labs/mcp-go 构建的 MCP 服务,通过 Docker Engine API 管理容器与镜像,可直接打包成 Docker 镜像发布。
分层设计
internal/domain:实体与仓储接口(容器、镜像、端口映射)internal/application:用例服务internal/infrastructure/docker:基于 Docker SDK 的仓储实现internal/interfaces/mcp:基于 mcp-go 注册工具(list/start/stop/inspect 等)cmd/server:入口,启动 SSE 传输的 MCP 服务
MCP 工具
list_containers:列出容器(状态、端口、创建时间)inspect_container:id必填,返回容器详情start_container:id必填,启动容器stop_container:id必填,停止容器list_images:列出镜像(标签、大小、创建时间)
本地运行
export MCP_ADDR=":8080"
export MCP_BASE_PATH="/mcp" # SSE 默认挂载路径
go run ./cmd/server连接信息(默认):
- SSE 端点:
http://localhost:8080/mcp/sse - Message 端点:
http://localhost:8080/mcp/message
Docker 打包与运行
# 构建镜像
docker build -t mcp-docker-manager .
# 运行(挂载 Docker Socket 以管理宿主 Docker)
docker run -d \
-p 8080:8080 \
-v /var/run/docker.sock:/var/run/docker.sock \
-e MCP_ADDR=":8080" \
-e MCP_BASE_PATH="/mcp" \
--name mcp-docker-manager \
mcp-docker-manager
# 直接推送到仓库(示例)
# Docker Hub(先 docker login)
docker tag mcp-docker-manager your-dockerhub-username/mcp-docker-manager:latest
docker push your-dockerhub-username/mcp-docker-manager:latest配置
MCP_ADDR:监听地址,默认:8080MCP_PORT:仅端口号,优先于 MCP_ADDR(自动补冒号)MCP_BASE_PATH:SSE/message 路径前缀,默认/mcpMCP_BASE_URL:可选,用于反向代理场景返回完整回调 URLMCP_SERVER_NAME/MCP_SERVER_VERSION:对外曝光的服务器信息- Docker SDK 环境变量(可选):
DOCKER_HOST、DOCKER_API_VERSION等
提示:如果在容器内设置MCP_ADDR=8080,会自动补成:8080;也可以直接设置MCP_PORT=8080。
连接远程 Docker:
- 设置
DOCKER_HOST=tcp://:2376(或 2375),可连远程守护进程。 - 如启用 TLS,配置
DOCKER_TLS_VERIFY=1以及DOCKER_CERT_PATH指向证书目录。 - 其他变量(按 Docker SDK 约定):
DOCKER_API_VERSION、DOCKER_TLS等。
容器内连接宿主机 Docker(典型做法):
- 直接挂载宿主机的 Unix Socket:
-v /var/run/docker.sock:/var/run/docker.sock - Windows/macOS Docker Desktop:挂载
//./pipe/docker_engine或使用DOCKER_HOST=tcp://host.docker.internal:2375(如开启了 2375 端口,注意安全)。 - 如果使用 TCP 远程守护进程(带证书):设置
DOCKER_HOST、DOCKER_TLS_VERIFY=1、DOCKER_CERT_PATH=/path/to/certs并挂载证书目录。
开发与测试
go test ./...