使用说明
Docker 管理器 MCP
从一个地方管理所有Docker主机。 Docker Manager MCP 允许 AI 助手管理容器、部署堆栈,并监控您整个基础设施中的服务——无需任何配置。
🚀 一键安装
curl -sSL https://raw.githubusercontent.com/jmagar/docker-mcp/main/install.sh | bash
就是这个了!安装程序:
- ✅ 自动设置SSH密钥
- ✅ 导入您SSH配置文件中的所有现有主机
- ✅ 配置安全认证
- ✅ 在8000端口启动服务
无需手动配置。 如果你可以通过SSH连接到它,Docker Manager就可以对其进行控制。
🎯 你实际可以做的
- 部署应用程序 跨越多个Docker主机
- 控制容器 具有启动/停止/重启操作
- 监控服务 实时日志流处理
- 管理堆栈 使用 Docker Compose 配置
- 更新服务 使用滚动更新,无需停机
- 检查端口使用情况 以避免冲突
- 自动发现主机 来自您的SSH配置
🛠 三款工具
只需用简单的英语与你的AI助手交谈即可。 无需复杂命令或JSON格式——只需描述您想对Docker基础设施执行的操作。
工具1: docker_hosts
简化的Docker主机管理工具。
行动: • 列表列出所有已配置的Docker主机
- 要求:无
• 添加添加一个新的Docker主机(自动运行测试连接和发现)
- 必需项:主机ID(host_id)、SSH主机(ssh_host)、SSH用户(ssh_user)
- 可选参数:ssh_port(默认:22),ssh_key_path,description,tags,enabled(默认:true)
• 港口列出或检查主机上的端口使用情况
- 必需项:host_id(主机ID)
- 可选:端口(用于可用性检查)
• **import_ssh 可以翻译为“导入SSH”或“引入SSH”**从SSH配置中导入主机(自动对每个主机运行测试连接和发现)
- 要求:无
- 可选:ssh_config_path(SSH配置文件路径),selected_hosts(选定的主机)
• 清理Docker 系统清理操作
- 必需参数:host_id,cleanup_type
- 有效的清理类型:`"检查"` | `"安全"` | `"适中"` | `"激进"`
• 测试连接测试主机连接性(同时运行发现功能)
- 必需:host_id(主机ID)
• 发现发现主机上的路径和功能
- 要求:host_id(使用 'all' 以按顺序发现所有主机)
- 发现:compose_path,appdata_path
- 单主机:快速发现(5-15秒)
- 所有主机:顺序发现(总计30-60秒)
• 编辑修改主机配置
- 必需:host_id
- 可选参数:ssh_host(SSH主机)、ssh_user(SSH用户)、ssh_port(SSH端口)、ssh_key_path(SSH密钥路径)、description(描述)、tags(标签)、compose_path(组合文件路径)、appdata_path(应用数据路径)、enabled(启用状态)
• 移除从配置中移除主机
- 所需:主机ID
• 磁盘使用情况只读Docker磁盘使用情况概览(清理检查的别名)
- 必需:主机ID
自然语言示例:
"Add a new Docker host called production-1 at 192.168.1.100 with user dockeruser"
"Add host staging at 10.0.1.50 using SSH key ~/.ssh/staging_key"
"List all my Docker hosts"
"Check what ports are being used on production-1"
"Import hosts from my SSH config"
"Clean up Docker on production-1 using safe mode"
"Test connection to staging-server"
"Discover capabilities on all hosts"
"Update the compose path for production-1 to /opt/stacks"
"Remove the old-server host from my configuration"
工具2: docker_container
综合Docker容器管理工具。
行动: • 列表列出主机上的容器
- 必需:host_id
- 可选参数:all_containers(所有容器)、limit(限制数量)、offset(偏移量)
• 信息获取容器信息
- 必需:host_id(主机ID),container_id(容器ID)
• 开始启动一个容器
- 必需参数:host_id(主机ID),container_id(容器ID)
- 可选参数:强制,超时
• 停止停止一个容器
- 所需:host_id(主机ID),container_id(容器ID)
- 可选参数:强制,超时
• 重启重启一个容器
- 必需:host_id(主机ID),container_id(容器ID)
- 可选参数:强制(force)、超时(timeout)
• 移除移除一个容器
- 必需参数:host_id(主机ID),container_id(容器ID)
- 可选:强制
• 日志获取容器日志
- 必需:host_id(主机ID),container_id(容器ID)
- 可选:跟随,线条
• 拉将容器镜像拉取到主机上
- 必需参数:host_id(主机ID),image_name(镜像名称)
自然语言示例:
"List all containers on production-1"
"Include stopped containers on staging"
"Show info for the nginx container on production-1"
"Start the wordpress container on production-1"
"Force stop the mysql database on staging with a 30 second timeout"
"Restart the web server container on production-1"
"Remove the old cache container from staging"
"Tail the last 200 lines of logs for api-server on production-1"
"Pull the latest nginx image on production-1"
工具3: docker_compose
集成的Docker Compose堆栈管理工具。
行动: • 列表列出主机上的栈
- 必需:host_id
• 视图;看法查看堆栈的 compose 文件
- 必需参数:host_id,stack_name
• 部署部署一个堆栈
- 所需参数:host_id(主机ID)、stack_name(堆栈名称)、compose_content(组合内容)
- 可选:环境、拉取镜像、重新创建
• 启动/停止/重启/构建/拉取管理堆栈生命周期
- 必需参数:host_id(主机ID),stack_name(堆栈名称)
- 可选:选项
• **ps(注:在中文语境中,"ps"通常不直接翻译,因为它是一个缩写或特定术语,在不同上下文中有不同含义,如“图片编辑软件Photoshop”的简称等。若在此处作为一般表述,可理解为“附言”或“补充”,但具体翻译需结合上下文。)**显示堆栈服务(状态和端口)
- 必需参数:host_id(主机ID),stack_name(堆栈名称)
• 发现发现主机上的组合路径
- 必需:host_id
• 日志获取堆栈日志
- 必需:host_id(主机ID),stack_name(堆栈名称)
- 可选:跟随、线条、服务(子集)
• 迁移在主机之间迁移栈(或堆栈)
- 必需参数:host_id(主机ID)、target_host_id(目标主机ID)、stack_name(堆栈名称)
- 可选参数:remove_source(移除源文件)、skip_stop_source(跳过停止源文件)、start_target(启动目标)、dry_run(模拟运行)
自然语言示例:
"List all stacks on production-1"
"Deploy wordpress stack to production-1 with this compose file: <content>"
"Deploy plex to media-server with DB_PASSWORD=secret123"
"Bring up the wordpress stack on production-1"
"Take down the old-app stack on staging"
"Restart the plex stack on media-server"
"Build the development stack on staging"
"Discover compose files on production-1"
"Show logs from the wordpress stack on production-1"
"Stream live logs from plex stack on media-server"
"Show last 200 lines from api-stack logs on staging"
"Migrate wordpress from old-server to new-server"
"Do a dry run migration of plex from server1 to server2"
"Migrate database stack and remove it from the source after"
🏗 架构:为何选择三款整合工具?
Docker Manager MCP 使用 综合行动-参数模式 而不是27个独立工具。这种架构选择提供了:
代币效率
- 效率提高了2.6倍我们的3个工具使用约5000个标记,而27个单独的工具则使用约9700个标记
- 更好的扩展性向现有工具中添加新功能比创建新工具更高效
- **上下文节省(或“上下文节省空间”)**每个工具会增加约400-500个标记,而整合则会按乘数方式减少这一数量
复杂操作支持
Docker管理需要复杂的多步骤操作:
- 迁移停止 → 验证 → 存档 → 转移 → 部署 → 校验
- 清理分析 → 确认 → 执行 → 验证
- 部署验证 → 拉取 → 配置 → 启动 → 健康检查
混合连接模型
不同的操作需要不同的方法:
- 集装箱操作为了提高效率,使用Docker上下文(通过SSH隧道的API)
- 栈操作用于编排文件管理的直接SSH(文件系统访问)
服务层的优势
- 集中验证在所有操作中保持一致的输入验证
- 错误处理统一的错误报告和恢复机制
- 资源管理连接池、上下文缓存和清理
- 业务逻辑复杂的编曲,简单装饰器无法处理
如需技术细节,请参阅 docs/consolidated-action-pattern.md
🚀 高级迁移功能:
传输方法:
- **Rsync(中文常译为“Rsync同步工具”或简称“Rsync”,但根据语境,“Rsync”本身也可直接作为名称使用,因其已为人们所熟知)**与所有Docker环境通用兼容,支持压缩和增量传输
增强的安全特性:
- 默认情况下始终停止容器 (必须明确跳过使用
skip_stop_source: true- 不建议) - 验证所有容器均已完全停止 在归档之前(防止数据损坏)
- 档案完整性验证 在转账之前
- 文件系统同步延迟 容器关闭后
- 可靠的转账 使用 rsync 确保数据一致性
💡 实际应用案例
部署一个WordPress网站
# compose_content for WordPress deployment
version: '3.8'
services:
wordpress:
image: wordpress:latest
ports:
- "80:80"
environment:
WORDPRESS_DB_HOST: db
WORDPRESS_DB_PASSWORD: secret
db:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: secret
volumes:
- db_data:/var/lib/mysql
volumes:
db_data:
使用方法:“使用此 compose 文件将 WordPress 栈部署到 production-1 环境”
监控多个主机
只需向您的AI助手询问:
- “显示我所有的Docker主机”
- “列出每个主机上的所有容器”
- “在 production-1 上显示 nginx 的日志”
- “实时流式传输所有数据库容器的日志”
应急集装箱管理
当事情出错时,只需描述问题即可:
- “强制停止 production-1 上的所有容器”
- “我的预发布服务器上哪个进程正在使用80端口?”
- “重启所有我的网络服务”
- “给我看看当前在 production-1 上运行的是什么”
将堆栈迁移到新主机
非常适合硬件升级、负载均衡或迁移到更快存储设备:
-
测试迁移 (试运行):
"Do a dry run migration of wordpress from old-server to new-server" -
Rsync 迁移 (通用兼容性):
- 默认情况下,ALWAYS 会停止容器 (安全第一!)
- 验证所有容器均已完全停止 (防止数据损坏)
- 等待文件系统同步以确保数据一致性
- 存档所有卷和数据(不包括缓存、日志、node_modules)
- 验证存档完整性 在转移之前
- 通过rsync进行压缩传输
- 更新目标主机的路径
- 在目标上部署并启动
- 保留您所有的数据和配置
迁移智能处理:
- 命名的Docker卷和绑定挂载
- 编写配置文件和环境变量
- 不同主机结构之间的路径转换
- Rsync传输 采用压缩和增量同步技术
- 数据一致性 通过集装箱停靠和核查
🔧 配置(可选!)
Docker Manager MCP 的美妙之处在于 你无需进行任何配置它会自动:
- 从SSH配置中发现您的Docker主机
- 建立安全连接
- 管理身份验证
但如果您想进行定制:
添加自定义主机
创建 ~/.docker-mcp/config/hosts.yml:
hosts:
# Production Docker Host
production-server:
hostname: 192.168.1.100
user: myuser
description: "Production Docker server"
compose_path: /opt/compose # Where to store compose files
appdata_path: /opt/appdata # Container data directory
# Staging Docker Host
staging-server:
hostname: 192.168.1.101
user: myuser
description: "Staging Docker server"
compose_path: /opt/compose # Where to store compose files
appdata_path: /opt/appdata # Container data directory
使用环境变量
FASTMCP_PORT=8080 # Change port
LOG_LEVEL=DEBUG # More verbose logging
FASTMCP_DATA_DIR=/var/lib/docker-mcp/data # Persist OAuth tokens & runtime data
DOCKER_MCP_DATA_DIR=/var/lib/docker-mcp/data # Alias for tooling expecting DOCKER_MCP_*
# OAuth Authentication (Optional but Recommended)
FASTMCP_ENABLE_OAUTH=true # Enable OAuth support (defaults to off)
FASTMCP_SERVER_AUTH=fastmcp.auth.GoogleProvider # Select Google OAuth provider
FASTMCP_SERVER_AUTH_GOOGLE_CLIENT_ID=your-client-id # Google OAuth client ID
FASTMCP_SERVER_AUTH_GOOGLE_CLIENT_SECRET=your-client-secret # Google OAuth client secret
FASTMCP_SERVER_AUTH_GOOGLE_REDIRECT_PATH=/auth/callback # OAuth callback path
# Or use any other FastMCP auth provider by specifying its import path
🚀 转移方法
Rsync传输特性:
- 通用兼容性与任何Linux Docker主机兼容
- 数据完整性使用校验和进行文件级验证
- 增量的;逐步的高效压缩的增量同步
- 元数据保留权限、时间戳和所有权
- 可靠的逐文件传输并具备重试功能
- 用例所有Docker环境,通用兼容
演出
- 大型数据集高效的增量传输减少了带宽占用
- 小堆栈快速传输,开销极小
- 数据库迁移容器停止确保数据一致性
🐳 Docker 部署
已经包含在内!安装程序会创建所有内容:
# Check status
cd ~/.docker-mcp && docker compose ps
# View logs
cd ~/.docker-mcp && docker compose logs
# Update to latest
cd ~/.docker-mcp && docker compose pull && docker compose up -d
# Stop service
cd ~/.docker-mcp && docker compose down
🔒 内置安全功能
- 仅使用SSH密钥认证 (无密码)
- 专用SSH密钥 用于 Docker Manager(与您的个人密钥隔离)
- 持久化数据卷 (
FASTMCP_DATA_DIR) 以跨重启保留OAuth凭据和运行时状态 - OAuth 认证支持 (谷歌、GitHub 或任何 FastMCP 提供商)
- 身份验证 和;与
whoami诊断工具 - 只读挂载 用于配置
- 速率限制 以防止滥用
- 非根容器 执行
- 自动安全更新 通过 GitHub Actions
OAuth 认证功能
当启用OAuth时(设置 FASTMCP_ENABLE_OAUTH=true 并提供 FASTMCP_SERVER_AUTH):
- 动态加载提供者 - 使用谷歌、GitHub或自定义身份验证提供商
whoami工具 - 验证已认证用户的身份和声明- 安全处理令牌 - 基于FastMCP的稳健认证框架构建
- 灵活配置 - 基于环境的配置,便于部署
💻 为开发者准备
快速开发环境设置
git clone https://github.com/jmagar/docker-mcp
cd docker-mcp
uv sync
uv run docker-mcp
格式代码
uv run ruff format .
uv run ruff check . --fix
📁 内容概览
docker-mcp/
├── docker_mcp/ # Main application
│ ├── server.py # FastMCP server with 3 consolidated tools
│ ├── core/ # Docker & SSH management
│ ├── services/ # Business logic
│ └── tools/ # Tool implementations
├── config/ # Example configurations
├── tests/ # Comprehensive test suite
└── install.sh # One-line installer
🆘 需要帮助吗?
容器无法启动?
只需问问你的AI助手:
"What's running on port 80 on my-server?"
"Show me the logs from my-app container on my-server"
"Why won't my nginx container start on production-1?"
无法连接到主机?
让您的AI助手协助解决问题:
"Test the connection to my staging server"
"Import all hosts from my SSH config"
"Add my new server at 192.168.1.100 to Docker Manager"
还有其他事情吗?
- 检查日志:
~/.docker-mcp/data/logs/ - 调试模式:
LOG_LEVEL=DEBUG - 打开一个问题(或报告一个问题)
🎉 为什么选择 Docker Manager MCP?
- 零配置 - 与您现有的设置即开即用
- 通用控制 - 从一个地方管理所有Docker主机
- 对AI友好 - 专为大型语言模型(LLMs)设计,以协调您的基础设施
- 生产就绪 - 内置速率限制、错误处理和日志记录功能
- 默认安全 - 仅使用SSH密钥,绝不使用密码
- 始终保持最新 - 通过Docker进行自动更新
📄 许可证
麻省理工学院(MIT)——随你如何使用!
🚀 立即开始
# Install in 10 seconds
curl -sSL https://raw.githubusercontent.com/jmagar/docker-mcp/main/install.sh | bash
# That's it! Start managing your Docker infrastructure
有问题吗? 打开一个问题(或:提交一个问题) - 我们来帮忙了!
