Docker管理工具

Docker Manager MCP是一款集中管理Docker主机的工具,支持通过AI助手管理容器、部署堆栈和监控服务,无需配置即可使用。

  • by jmagar
  • Python
  • 本地部署
  • 2 星标
  • 更新于
在 GitHub 查看 jmagar/docker-mcp

使用说明

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 上运行的是什么”

将堆栈迁移到新主机

非常适合硬件升级、负载均衡或迁移到更快存储设备:

  1. 测试迁移 (试运行):

    "Do a dry run migration of wordpress from old-server to new-server"
    
  2. 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 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

有问题吗? 打开一个问题(或:提交一个问题) - 我们来帮忙了!