311 查看 · 2026-07-07 更新
Docker MCP 服务器
一个强大的模型上下文协议(MCP)服务器,它在隔离的Docker容器中执行代码,并将结果返回给像Claude这样的语言模型。
特性
- 隔离代码执行:在与主系统分离的Docker容器中运行代码
- 多语言支持:使用任何具有Docker镜像的语言执行代码
- 复杂脚本支持:运行简单的命令和完整的多行脚本
- 包管理:使用pip、npm、apt-get或apk安装依赖项
- 容器管理:轻松创建、列出和清理Docker容器
- 健壮的错误处理:优雅的超时管理和回退机制
- 彩色输出:清晰的颜色编码控制台反馈
要求
- Python 3.9+
- 安装并运行Docker
- fastmcp库
安装
-
克隆此仓库: bash git clone https://github.com/yourusername/docker_mcp_server.git cd docker_mcp_server
-
创建虚拟环境: bash python -m venv venv source venv/bin/activate # 在Windows上: venvScriptsactivate
-
安装所需包: 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 攻击。
许可证
贡献
欢迎贡献!请随时提交 Pull Request。
来源
- 来源:github
- 链接:https://github.com/zaycruz/docker_mcp