Docker MCP服务器
用于Docker操作的全面模型上下文协议(MCP)服务器,通过Claude AI和其他MCP客户端提供完整的Docker功能。用。NET 8,专为生产使用而设计。
特性
此Docker MCP服务器提供 完整的Docker功能 这大大超越了所有现有的实现:
🚀 集装箱作业
- ✅ 创建容器 具有完整的配置支持(35+个选项)
- ✅ 启动、停止、重新启动容器 具有超时控制
- ✅ 移除容器 具有力度和音量选项
- ✅ 列出容器 具有先进的过滤和尺寸
- ✅ 获取容器日志 使用时间戳、跟踪和过滤
- ✅ 检查集装箱 了解详细信息
- ✅ 执行命令 在运行的容器中
- ✅ 获取实时统计数据 用于监控
🖼️ 图像操作
- ✅ 列出图片 具有过滤选项
- ✅ 拉取图像 来自具有平台支持的注册表
- ✅ 删除图像 具有强制选项
- ✅ 构建图像 从带有构建参数的Dockerfiles
- ✅ 标记图像 用于存储库管理
- ✅ 检查图像 了解详细信息
- ✅ 获取图像历史记录 以及图层信息
- ✅ 修剪未使用的图像 带有悬挂/所有选项
- ✅ 搜索图像 Docker Hub
- ✅ 推送图片 到登记处
🌐 网络运营
- ✅ 列出网络 信息完整
- ✅ 创建网络 使用自定义驱动程序和IPAM
- ✅ 删除网络 安全地
- ✅ 连接/断开容器 往返于网络
- ✅ 检查网络 有关配置详细信息
- ✅ 修剪未使用的网络
- ✅ 子网配置 支持网关
💾 批量操作
- ✅ 列出卷 带过滤功能
- ✅ 创建卷 具有自定义驱动程序和选项
- ✅ 删除卷 具有强制选项
- ✅ 检查体积 了解详细信息
- ✅ 修剪未使用的卷
- ✅ 音量过滤 按标签和元数据
🐳 Docker编写操作
- ✅ 部署组合堆栈 从YAML到环境注入
- ✅ 删除组合堆栈 具有清理选项
- ✅ 列出组合堆栈容器
- ✅ 获取撰写堆栈日志 (所有服务或特定服务)
- ✅ 启动/停止/重新启动堆栈
- ✅ 规模服务 堆叠
- ✅ 执行命令 在撰写服务
🛠️ 系统操作
- ✅ 检查Docker可用性 以及连接性
- ✅ 获取系统信息 和能力
- ✅ 获取版本信息 用于后台程序和API
- ✅ 全系统修剪 选择性清理
- ✅ 磁盘使用信息 监测
- ✅ 事件监视 带过滤功能
- ✅ 进程信息 用于集装箱
🎯 高级容器配置
- ✅ 全卷装载支持 (绑定挂载、命名卷、tmpfs)
- ✅ 环境变量 通过验证
- ✅ 端口映射 (多端口,TCP/UDP协议)
- ✅ 资源限制 (CPU、内存、PID限制)
- ✅ 安全选项 (功能、AppArmor、SELinux、seccomp)
- ✅ 设备映射 具有权限
- ✅ dns配置 以及自定义解析器
- ✅ 额外主机 用于/etc/hosts条目
- ✅ Tmpfs挂载 用于临时文件系统
- ✅ Ulimits (文件描述符、进程、内存锁)
- ✅ 标签和元数据 管理
- ✅ 重新启动策略 (不,除非停止,否则总是失败)
- ✅ 网络模式 (网桥、主机、无、容器)
- ✅ 用户和工作目录 规格
- ✅ 自动拆卸支持 (相当于rm)
- ✅ 交互式和TTY模式
- ✅ 只读文件系统 出于安全考虑
- ✅ 特权集装箱 配备安全控制装置
安装和设置
先决条件
- .NET 8.0 SDK或运行时
- Docker桌面或Docker引擎
- MCP兼容客户端(克劳德桌面、光标、VS代码等)
选项1:使用预构建的二进制文件(推荐)
从以下网址下载适用于您平台的最新版本 :
窗户:
# Download and extract Windows x64 version
curl -L https://github.com/jamesburton/DockerMcpServer/releases/latest/download/DockerMcpServer-win-x64.zip -o DockerMcpServer.zip
# Extract and runLinux:
# Download and extract Linux x64 version
curl -L https://github.com/jamesburton/DockerMcpServer/releases/latest/download/DockerMcpServer-linux-x64.tar.gz -o DockerMcpServer.tar.gz
tar -xzf DockerMcpServer.tar.gz
chmod +x DockerMcpServer
./DockerMcpServermacOS:
# Download and extract macOS version (Intel or Apple Silicon)
curl -L https://github.com/jamesburton/DockerMcpServer/releases/latest/download/DockerMcpServer-osx-x64.tar.gz -o DockerMcpServer.tar.gz
tar -xzf DockerMcpServer.tar.gz
chmod +x DockerMcpServer
./DockerMcpServer选项2:使用Docker容器
使用GitHub容器注册表在容器中运行Docker MCP服务器:
# Basic usage
docker run -d --name docker-mcp-server \
-v /var/run/docker.sock:/var/run/docker.sock \
ghcr.io/jamesburton/dockermcpserver:latest
# With custom configuration
docker run -d --name docker-mcp-server \
-v /var/run/docker.sock:/var/run/docker.sock \
-v $(pwd)/config:/app/config \
ghcr.io/jamesburton/dockermcpserver:latest选项3:从源代码运行(开发)
- 克隆存储库:
git clone https://github.com/jamesburton/DockerMcpServer.git
cd DockerMcpServer- 恢复依赖关系:
dotnet restore- 运行服务器:
dotnet run --project DockerMcpServer/DockerMcpServer.csprojMCP客户端配置
Claude桌面配置
添加到您的Claude Desktop配置文件中:
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - 窗户:
%APPDATA%/Claude/claude_desktop_config.json
使用预构建的可执行文件:
{
"mcpServers": {
"docker": {
"command": "/path/to/DockerMcpServer",
"args": [],
"env": {}
}
}
}使用Docker容器:
{
"mcpServers": {
"docker": {
"command": "docker",
"args": ["run", "-i", "--rm", "-v", "/var/run/docker.sock:/var/run/docker.sock", "ghcr.io/jamesburton/dockermcpserver:latest"],
"env": {}
}
}
}使用.NET run(开发):
{
"mcpServers": {
"docker": {
"command": "dotnet",
"args": ["run", "--project", "/path/to/DockerMcpServer/DockerMcpServer"],
"env": {}
}
}
}光标配置
光标MCP设置文件中的类似配置。
使用示例
创建容器(Qdrant示例)
Create a Docker container with:
- Image: qdrant/qdrant:latest
- Name: qdrant
- Auto-remove: true
- Ports: ["6333:6333", "6334:6334"]
- Volumes: ["%cd%/qdrant/storage:/qdrant/storage", "%cd%/qdrant/config:/qdrant/config", "%cd%/qdrant/snapshots:/qdrant/snapshots"]高级安全容器
Create a Docker container with:
- Image: nginx:latest
- Name: secure-nginx
- Memory limit: 512m
- CPU limit: 1.0
- Ports: ["8080:80"]
- User: "1000:1000"
- Read-only: true
- CapDrop: ["ALL"]
- CapAdd: ["NET_BIND_SERVICE"]
- SecurityOpt: ["no-new-privileges", "apparmor:docker-default"]部署编写堆栈
Deploy a Docker Compose stack with:
- Project name: my-app
- Compose YAML: |
version: '3.8'
services:
web:
image: nginx:latest
ports:
- "8080:80"
db:
image: postgres:13
environment:
POSTGRES_PASSWORD: secret
volumes:
- db-data:/var/lib/postgresql/data
volumes:
db-data:与现有解决方案的功能比较
| 特点 | Docker MCP服务器 | |||
|---|---|---|---|---|
| 容器创建 | ✅ 35+选项 | ❌ 4个基本选项 | ❌ 仅限基本 | ❌ 选择有限 |
| 卷装载 | ✅ 全力支持 | ❌ 不支持 | ❌ 不支持 | ❌ 仅限基本 |
| 自动删除(-rm) | ✅ 支持 | ❌ 不支持 | ❌ 不支持 | ❌ 不支持 |
| 多端口映射 | ✅ TCP/UDP支持 | ✅ 基本支持 | ✅ 基本支持 | ✅ 基本支持 |
| 环境变量 | ✅ 通过验证 | ✅ 基本支持 | ✅ 基本支持 | ✅ 基本支持 |
| Docker Compose | ✅ 全套套房 | ✅ 仅部署/删除 | ❌ 不支持 | ❌ 不支持 |
| 网络管理 | ✅ 完全CRUD+IPAM | ❌ 不支持 | ❌ 不支持 | ❌ 不支持 |
| 卷管理 | ✅ 完整CRUD | ❌ 不支持 | ❌ 不支持 | ❌ 不支持 |
| 图像管理 | ✅ 全套套房 | ❌ 仅列出 | ✅ 基本CRUD | ❌ 只拉 |
| 资源限制 | ✅ CPU/内存/PID | ❌ 不支持 | ❌ 不支持 | ❌ 不支持 |
| 安全选项 | ✅ 功能/SELinux/AppArmor | ❌ 不支持 | ❌ 不支持 | ❌ 明确排除 |
| 设备映射 | ✅ 全力支持 | ❌ 不支持 | ❌ 不支持 | ❌ 不支持 |
| 集装箱检测 | ✅ 完整详细信息 | ❌ 不支持 | ❌ 不支持 | ❌ 不支持 |
| 实时统计 | ✅ CPU/内存/网络 | ❌ 不支持 | ❌ 不支持 | ❌ 不支持 |
| 系统信息 | ✅ 全系统API | ❌ 不支持 | ❌ 不支持 | ❌ 不支持 |
| 容器日志 | ✅ 高级过滤 | ✅ 基本支持 | ❌ 不支持 | ❌ 不支持 |
| 集装箱执行员 | ✅ 交互式支持 | ❌ 不支持 | ❌ 不支持 | ❌ 不支持 |
| 系统清理 | ✅ 综合修剪 | ❌ 不支持 | ❌ 不支持 | ❌ 不支持 |
| 平台 | 🟢 .NET 8 | 🐍 python | 🟨 Node.js | 🐍 python |
| 建筑 | 🏗️ 模块化/企业 | 📝 简单脚本 | 📝 基本CLI包装器 | 📝 简单脚本 |
竞争对手分析
####
- 范围:基本容器和Compose操作
- 局限性:没有卷管理、网络操作、安全功能或系统监控
- 建筑:基于Python的简单实现
####
- 范围:基本容器和映像操作
- 局限性:没有Compose支持,没有高级功能,CLI包装器方法
- 建筑:依赖Docker CLI的Node.js
####
- 范围:有限的集装箱作业,有安全限制
- 局限性:明确排除安全功能,不支持作曲/网络/卷
- 建筑:Python采用安全第一的方法
建筑
核心组件
IDockerService:所有Docker操作的主服务接口DockerService:使用Docker进行全面实施。DotNet APIDockerClientFactory:创建和配置Docker客户端的工厂- 模型类:具有验证功能的强类型请求/响应模型
模块化设计(部分课程)
DockerService.Container.cs:容器生命周期管理DockerService.Image.cs:映像操作和注册表交互DockerService.Volume.cs:卷管理和存储操作DockerService.Network.cs:网络创建和管理DockerService.Compose.cs:Docker编写堆栈操作DockerService.System.cs:系统级操作和监控DockerService.Security.cs:安全验证和执行DockerService.Helpers.cs:实用方法和解析器
MCP命令类
DockerContainerCommands:11个集装箱管理工具DockerImageCommands:10个图像操作工具DockerNetworkCommands:8个网络管理工具DockerVolumeCommands:5个体积操作工具DockerComposeCommands:7组合堆栈工具DockerSystemCommands:8个系统维护工具
总计:49+MCP工具 提供全面的Docker功能
依赖项
- 微软。扩展。托管 (8.0.1):应用程序托管框架
- 微软。扩展。日志记录 (8.0.1):结构化日志记录基础设施
- 模型上下文协议 (0.1.0-preview.11):MCP服务器实现
- Docker。DotNet (3.125.15):官方Docker API客户端。网
- YamlDotNet (16.2.1):对Compose文件进行YAML解析
开发与调试
MCP检查员
对于开发和调试,请使用MCP检查器:
# For source-based development
npx @modelcontextprotocol/inspector dotnet run --project /path/to/DockerMcpServer/DockerMcpServer
# For built executable
npx @modelcontextprotocol/inspector /path/to/DockerMcpServer日志记录
服务器包括不同级别的全面日志记录:
- 信息:成功的操作和状态更改
- 警告:非关键问题和退步
- 错误:具有详细上下文的操作失败
- 调试:详细的操作痕迹(仅限开发)
日志被输出到stderr,以避免干扰MCP通信。
CI/CD管道
自动构建和发布
此存储库包括一个全面的CI/CD管道,可以自动执行以下操作:
- ✅ 测试 每个推送和拉取请求上的代码
- ✅ 建筑 多平台二进制文件(Windows、Linux、macOS-x64、ARM64)
- ✅ 创建 linux/amd64和linux/arm64的Docker镜像
- ✅ 出版 转到GitHub容器注册表(ghcr.io)
- ✅ 产生 GitHub发布可下载资产
贡献者所需的设置
要启用Docker镜像发布,存储库维护人员需要配置:
- GHCR_TOKEN机密:个人访问令牌
write:packages范围
- 看 docs/CI-CD-SETUP.md 详细说明
- 可选的:根据需要为扩展功能配置其他机密
触发释放
# Create and push a new version tag
git tag v1.0.x
git push origin v1.0.x这会自动触发完整的CI/CD管道并创建GitHub版本。
Docker镜像
Docker镜像可以在GitHub容器注册表上找到:
- 最新版本:
docker pull ghcr.io/jamesburton/dockermcpserver:latest - 具体版本:
docker pull ghcr.io/jamesburton/dockermcpserver:v1.0.1
图像特征
- 多平台支持(linux/amd64、linux/arm64)
- 非root用户安全
- 健康检查包括
- 最小攻击面
- Docker场景中包含的Docker CLI
错误处理
服务器包括生产级错误处理:
- Docker守护进程连接:自动重试连接并清除错误消息
- 配置无效:带有有用错误描述的参数验证
- 资源冲突:优雅地处理命名冲突和资源锁
- 权限错误:关于Docker守护进程访问要求的明确指导
- 网络超时:具有重试逻辑的可配置超时
所有错误均以结构化形式返回 CommandResult 对象具有:
- 成功/失败状态
- 描述性错误消息
- 错误上下文和故障排除提示
- 操作特定数据(如可用)
安全考虑
集装箱安全
- 默认非特权:默认情况下,容器在没有提升权限的情况下运行
- 能力管理:精确控制Linux功能
- 安全上下文:支持AppArmor、SELinux和seccomp配置文件
- 只读文件系统:将根文件系统挂载为只读的选项
- 用户规范:以非root用户身份运行容器
输入验证
- 参数净化:Docker API调用之前验证的所有输入
- 资源限制解析:内存和CPU限制已安全验证和转换
- 路径验证:检查卷和设备路径的安全性
- 命令注入预防:命令参数已正确转义
网络安全
- 网络隔离:支持自定义网络和隔离
- 端口绑定验证:验证端口映射是否存在冲突
- DNS安全:带有验证的自定义DNS配置
性能注意事项
- 异步/等待模式:所有操作都是完全异步的
- 资源处置:正确清理Docker客户端连接
- 流处理:高效处理日志和统计数据流
- 内存管理:通过适当的垃圾回收实现最小的内存占用
- 连接池:重用Docker客户端连接
故障排除
常见问题
- Docker守护进程未运行
- 确保Docker桌面或Docker引擎已启动 - 检查Linux/macOS上的Docker套接字权限
- 权限被拒绝错误
- 将用户添加到 docker Linux组 - 确保Docker Desktop在Windows/macOS上具有适当的权限
- MCP服务器未启动
- 核实。NET 8运行时已安装 - 检查MCP配置中的文件路径 - 查看克劳德桌面/客户端日志
- 容器创建失败
- 验证图像名称和标签 - 检查可用系统资源 - 验证卷装载路径是否存在
调试命令
测试Docker连接:
# Test Docker daemon
docker info
# Test .NET installation
dotnet --version
# Test MCP server manually (source)
dotnet run --project /path/to/DockerMcpServer/DockerMcpServer
# Test MCP server manually (executable)
./DockerMcpServer贡献
看 贡献.md 详细的贡献指南。
- 分叉存储库
- 创建要素分支(
git checkout -b feature/amazing-feature) - 通过测试实施更改
- 确保所有现有测试通过
- 根据需要更新文档
- 提交拉取请求
开发指南
- 遵循C#编码规范和可空引用类型
- 为所有公共API添加XML文档
- 包括新功能的单元测试
- 更新API更改的集成测试
- 尽可能保持向后兼容性
许可证
此项目根据MIT许可证获得许可-请参阅 许可证 文件以获取详细信息。
支持和社区
- 问题:通过GitHub Issues报告错误和请求功能
- 讨论:加入社区讨论,提出问题和想法
- 文档:全面的API文档,以XML注释形式提供
- 发布:可用于所有平台的预构建二进制文件
致谢
此实现利用了出色的 图书馆并遵循 模型上下文协议 规范。
为什么选择Docker MCP服务器?
✅ 全覆盖
唯一支持完整Docker生态系统(容器、映像、卷、网络、Compose和系统操作)的Docker MCP服务器。
✅ 生产就绪
企业级错误处理、日志记录、安全性和性能优化使其适用于生产环境。
✅ 简易安装
为所有平台、Docker镜像和多种安装方法预构建的二进制文件。
✅ 开发者友好
全面的文档、直观的API和出色的调试支持加速了开发工作流程。
✅ 安全第一
内置的安全功能,包括功能管理、安全上下文和输入验证,可保护您的基础设施。
✅ 现代建筑
清洁、模块化。NET 8实现,具有异步/等待模式、依赖注入和全面测试。
✅ 可扩展
架构良好的代码库使得添加新功能和根据特定需求进行定制变得容易。
非常适合需要通过Claude AI和其他MCP客户端完全控制Docker的开发人员!
______________________________________________________________________
*内置于❤️ 使用。NET 8、Docker。DotNet与模型上下文协议*
