z

zaycruz

code-executionvirtualization

311 查看 · 2026-07-07 更新

Docker MCP 服务器

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

特性

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

要求

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

安装

  1. 克隆此仓库: bash git clone https://github.com/yourusername/docker_mcp_server.git cd docker_mcp_server

  2. 创建虚拟环境: bash python -m venv venv source venv/bin/activate # 在Windows上: venvScriptsactivate

  3. 安装所需包: bash pip install -r requirements.txt

使用

运行MCP检查器

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

bash 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: 要清理的容器的名称

示例

基本工作流程示例

python

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数据分析示例

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 示例

python

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 和其他 LLM 的集成

此 MCP 服务器可以与支持 Model Context Protocol 的 Claude 和其他 LLM 集成。使用 fastmcp install 命令将其注册到 Claude:

bash fastmcp install src/docker_mcp.py

故障排除

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

安全注意事项

此服务器在 Docker 容器中执行代码,这提供了与主机系统的隔离。但请注意以下事项:

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

许可证

MIT 许可证

贡献

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

来源