z

zaycruz

@zaycruz/docker_mcp
0 Stars 318 次浏览 zaycruz 更新于 2026-08-23
该服务暂未提供标准配置,请参考 README 手动接入

服务介绍

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。

相关 MCP 服务