返回市场
Docker_MCP

Docker_MCP

作者:zaycruz3 星标更新:2025-03-12

项目介绍

Docker MCP 服务器

一个强大的模型上下文协议(MCP)服务器,它在隔离的Docker容器中执行代码,并将结果返回给像Claude这样的语言模型。

特性

  • 隔离代码执行:在与主系统隔离的Docker容器中运行代码
  • 多语言支持:使用Docker镜像执行任何语言的代码
  • 复杂脚本支持:运行简单的命令和完整的多行脚本
  • 包管理:使用pip、npm、apt-get或apk安装依赖项
  • 容器管理:轻松创建、列出和清理Docker容器
  • 健壮的错误处理:优雅的超时管理和回退机制
  • 彩色输出:清晰、带颜色编码的控制台反馈

要求

  • Python 3.9+
  • 已安装并运行的Docker
  • fastmcp库

安装

  1. 克隆此仓库:

    git clone https://github.com/yourusername/docker_mcp_server.git
    cd docker_mcp_server
    
  2. 创建虚拟环境:

    python -m venv venv
    source venv/bin/activate  # 在Windows上:venv\Scripts\activate
    
  3. 安装所需包:

    pip install -r requirements.txt
    

使用方法

运行MCP检查器

测试和探索服务器的功能:

python run_server.py

MCP检查器界面将在浏览器中的http://localhost:5173打开。

可用工具

Docker MCP服务器提供以下工具:

1. 列出容器

列出所有Docker容器及其详细信息:

  • 参数
    • show_all:(可选)是否显示包括已停止的所有容器(默认:True)

2. 创建容器

创建并启动具有可选依赖项的Docker容器:

  • 参数
    • image:要使用的Docker镜像(例如:"python:3.9-slim","node:16")
    • container_name:容器的唯一名称
    • dependencies:(可选)要安装的包的空格分隔列表(例如:"numpy pandas","express lodash")

3. 添加依赖项

在现有Docker容器中安装额外的包:

  • 参数
    • container_name:目标容器的名称
    • dependencies:要安装的包的空格分隔列表

4. 执行代码

在正在运行的Docker容器内执行命令:

  • 参数
    • container_name:目标容器的名称
    • command:要在容器内执行的命令

5. 执行Python脚本

在正在运行的Docker容器内执行多行Python脚本:

  • 参数
    • container_name:目标容器的名称
    • script_content:完整的Python脚本内容
    • script_args:传递给脚本的可选参数

6. 清理容器

停止并删除Docker容器:

  • 参数
    • container_name:要清理的容器的名称

示例

基本工作流程示例

# 1. 列出现有容器以查看正在运行的内容
list_containers()

# 2. 创建新容器
create_container(
    image="python:3.9-slim", 
    container_name="python-example", 
    dependencies="numpy pandas"
)

# 3. 在容器内执行命令
execute_code(
    container_name="python-example", 
    command="python -c 'import numpy as np; print(\"NumPy version:\", np.__version__)'"
)

# 4. 后期添加更多依赖项
add_dependencies(
    container_name="python-example", 
    dependencies="matplotlib scikit-learn"
)

# 5. 再次列出容器以确认状态
list_containers(show_all=False)  # 仅显示正在运行的容器

# 6. 完成后清理
cleanup_container(container_name="python-example")

Python数据分析示例

# 1. 创建带有依赖项的容器
create_container(
    image="python:3.9-slim", 
    container_name="python-test", 
    dependencies="numpy pandas matplotlib"
)

# 2. 执行Python脚本
script = """
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

# 创建一些数据
data = pd.DataFrame({
    'x': np.random.randn(100),
    'y': np.random.randn(100)
})

print(f"Data shape: {data.shape}")
print(f"Data correlation: {data.corr().iloc[0,1]:.4f}")
"""
execute_python_script(container_name="python-test", script_content=_script)

# 3. 如需后期添加更多依赖项
add_dependencies(container_name="python-test", dependencies="scikit-learn")

# 4. 验证容器是否正在运行
list_containers(show_all=False)

# 5. 完成后清理
cleanup_container(container_name="python-test")

Node.js示例

# 1. 检查现有的Node.js容器
list_containers()

# 2. 创建Node.js容器
create_container(
    image="node:16", 
    container_name="node-test", 
    dependencies="express axios"
)

# 3. 执行Node.js脚本
execute_code(
    container_name="node-test", 
    command="node -e \"console.log('Node.js version: ' + process.version); console.log('Express installed: ' + require.resolve('express'));\""
)

# 4. 添加更多依赖项
add_dependencies(container_name="node-test", dependencies="lodash moment")

# 5. 完成后清理
cleanup_container(container_name="node-test")

包管理器支持

Docker MCP服务器自动检测并使用适当的包管理器:

  • Python容器:使用pip
  • Node.js容器:使用npm
  • Debian/Ubuntu容器:使用apt-get
  • Alpine容器:使用apk

对于从镜像名称无法明显看出包管理器的容器,服务器会尝试检测可用的包管理器。

与Claude和其他LLMs集成

此MCP服务器可以与支持模型上下文协议的Claude和其他LLMs集成。使用fastmcp install命令将其注册到Claude:

fastmcp install src/docker_mcp.py

故障排除

  • 端口已被占用:如果看到“地址已被使用”的错误,请确保没有其他MCP检查器实例正在运行。
  • Docker连接问题:通过docker --version验证Docker是否正在运行。
  • 容器超时:服务器包括针对未在预期时间内响应的容器的回退机制。
  • 包安装失败:检查指定的包管理器下的包名是否正确。
  • 未找到容器:如果list_containers显示无结果,可能是因为Docker尚未创建任何容器。

安全注意事项

此服务器在Docker容器中执行代码,这提供了与主机系统的隔离。然而,应谨慎行事:

  • 不要在没有额外安全措施的情况下公开此服务器
  • 小心地将主机卷挂载到容器中
  • 考虑为容器设置资源限制,以防止DoS攻击

许可证

MIT许可证

贡献

欢迎贡献!请随意提交Pull Request。