使用说明
Docker MCP服务器
一个全面的、生产就绪的、符合行业标准的MCP(模型上下文协议)服务器,为GitHub Copilot和Claude等AI助手提供完整的Docker管理功能。以...为特色 37个强大的工具 涵盖容器、图像、网络、卷和系统操作。
📋 目录
关于
Docker MCP服务器 是一个模型上下文协议服务器,它将AI助手与Docker连接起来,支持自然语言的Docker操作。它基于TypeScript构建,并遵循行业最佳实践,为AI驱动的开发工作流程提供了一个完整的Docker管理解决方案。
为什么选择Docker MCP服务器?
- 🤖 人工智能原生:专为AI助手设计(GitHub Copilot,Claude)
- 🔧 全覆盖:37个工具,涵盖所有基本的Docker操作
- 🌐 远程支持:通过TCP、HTTPS或SSH隧道连接到任何主机上的Docker
- 🔒 安全第一:完全支持TLS/SSL和证书身份验证
- 📦 生产就绪:全面的错误处理、类型安全和测试
- 📚 证据充分的:详尽的文档,每个功能都有示例
- 🚀 易于使用:安装和配置简单
用例
- 人工智能辅助DevOps:让AI助手管理你的Docker基础设施
- 容器编排:通过自然语言创建、管理和监视容器
- 开发自动化:在人工智能的帮助下自动化Docker工作流程
- 远程管理:在远程主机上安全管理Docker
- 学习与探索:在AI指导下探索Docker功能
快速开始
面向npm用户(推荐)
# Install globally
npm install -g @swartdraak/docker-mcp-server
# Or use with npx (no installation needed)
npx @swartdraak/docker-mcp-server
面向开发者
# Clone the repository
git clone https://github.com/Swartdraak/Docker-MCP.git
cd Docker-MCP
# Install dependencies
npm install
# Build the project
npm run build
# Start the server
npm start
✨ 特性
核心能力
- ✅ 37个Docker工具:全面覆盖Docker操作,包括连接验证
- ✅ 远程Docker支持:通过TCP、HTTP、HTTPS或SSH隧道连接到远程主机上的Docker
- ✅ 安全连接:完全支持TLS/SSL,用于安全的远程Docker管理
- ✅ 容器管理:创建、运行、启动、停止、重新启动、暂停、取消暂停、重命名、删除、执行、统计、日志
- ✅ 图像操作:列出、拉取、构建、推送、标记、删除、修剪
- ✅ 网络管理:列出、创建、删除、检查、连接、断开连接
- ✅ 卷管理:列出、创建、删除、检查、修剪
- ✅ 系统操作:信息、版本、连接验证、修剪(容器、图像、卷、网络)
- ✅ 正确处理阵列:正确处理命令、入口点和环境变量
- ✅ VS代码集成:与GitHub Copilot无缝协作
- ✅ 行业标准:使用MCP SDK和Docker最佳实践
- ✅ TypeScript:完全类型安全和现代JavaScript功能
最近的增强功能
- 🌐 远程Docker主机支持:连接到任何远程主机上的Docker
- 🔒 TLS/HTTPS支持:使用证书身份验证进行安全连接
- 🔑 基于环境的配置:通过DOCKER_HOST、DOCKER_TLS_VERIFY、DOCKER_CERT_PATH轻松设置
- 🚇 SSH隧道支持:在不暴露Docker API的情况下进行安全的远程访问
v2.0中的新增功能
- 🚀 25个新工具:添加了广泛的容器、映像、网络和卷管理
- 🔧 集装箱执行员:在正在运行的容器中执行命令
- 📊 容器统计信息:实时CPU、内存、网络和I/O指标
- 🏗️ 建立形象:使用构建参数从Dockerfile构建映像
- 🔄 高级生命周期:重新启动、暂停、取消暂停、重命名容器
- 🌐 全网络CRUD:创建、检查、连接、断开连接、删除网络
- 💾 全容量原油:创建、检查、删除卷
- 🧹 资源清理:修剪未使用的容器、图像、卷、网络
- ⚙️ 系统信息:获取Docker守护进程信息和版本
安装
通过npm(推荐)
npm install -g @swartdraak/docker-mcp-server
来源
先决条件
- Node.js 18或更高版本
- Docker已安装并正在运行
- npm或yarn包管理器
设置
- 克隆存储库:
git clone https://github.com/Swartdraak/Docker-MCP.git
cd Docker-MCP
- 安装依赖项:
npm install
- 构建项目:
npm run build
用法
单独模式
直接运行服务器:
npm start
远程Docker配置
MCP服务器支持使用环境变量连接到远程Docker主机:
通过TCP连接到远程Docker
DOCKER_HOST=tcp://192.168.1.100:2375 npm start
通过HTTPS和TLS连接到远程Docker
DOCKER_HOST=https://192.168.1.100:2376 \
DOCKER_TLS_VERIFY=1 \
DOCKER_CERT_PATH=~/.docker/certs \
npm start
通过SSH隧道连接
首先,设置SSH隧道:
ssh -NL localhost:2375:/var/run/docker.sock user@remote-host
然后连接到隧道Docker:
DOCKER_HOST=tcp://localhost:2375 npm start
VS代码集成
要与VS Code和GitHub Copilot集成,请将以下内容添加到MCP设置文件中:
本地Docker (~/.vscode/mcp-settings.json 或在您的工作区设置中):
{
"mcpServers": {
"docker": {
"command": "node",
"args": ["/path/to/Docker-MCP/dist/index.js"]
}
}
}
用于TCP上的远程Docker:
{
"mcpServers": {
"docker": {
"command": "node",
"args": ["/path/to/Docker-MCP/dist/index.js"],
"env": {
"DOCKER_HOST": "tcp://192.168.1.100:2375"
}
}
}
}
适用于带TLS的远程Docker:
{
"mcpServers": {
"docker": {
"command": "node",
"args": ["/path/to/Docker-MCP/dist/index.js"],
"env": {
"DOCKER_HOST": "https://192.168.1.100:2376",
"DOCKER_TLS_VERIFY": "1",
"DOCKER_CERT_PATH": "/home/user/.docker/certs"
}
}
}
}
适用于克劳德桌面 (~/Library/Application Support/Claude/claude_desktop_config.json 在macOS上):
{
"mcpServers": {
"docker": {
"command": "node",
"args": ["/path/to/Docker-MCP/dist/index.js"]
}
}
}
使用npx的替代方案 (发布到npm后):
{
"mcpServers": {
"docker": {
"command": "npx",
"args": ["@swartdraak/docker-mcp-server"]
}
}
}
测试您的连接
连接测试实用程序
在使用MCP服务器之前,您可以使用附带的测试实用程序测试您的Docker连接:
# Test local Docker connection
node test-connection.js
# Test remote Docker via TCP
DOCKER_HOST=tcp://192.168.1.100:2375 node test-connection.js
# Test remote Docker via TLS
DOCKER_HOST=https://192.168.1.100:2376 \
DOCKER_TLS_VERIFY=1 \
DOCKER_CERT_PATH=~/.docker/certs \
node test-connection.js
# Test SSH tunnel connection
DOCKER_HOST=tcp://localhost:2375 node test-connection.js
测试工具将:
- ✓ 验证您的配置
- ✓ 检查TLS证书(如适用)
- ✓ 测试与Docker守护进程的连接
- ✓ 验证Docker操作(列出容器、映像、网络、卷)
- ✓ 显示系统信息
- ✓ 提供故障排除建议
validate_connection工具
MCP服务器运行后,您还可以使用 validate_connection 您的AI助手提供的工具:
"Validate my Docker connection"
此工具执行运行时连接测试并返回:
- 连接状态
- Docker版本和API信息
- 系统信息
- 常见操作的测试结果
手动测试
您还可以直接使用Docker CLI测试您的连接:
# Set environment variables
export DOCKER_HOST=tcp://192.168.1.100:2375
# Test commands
docker version
docker info
docker ps
有关详细的设置说明、故障排除和特定于平台的指南,请参阅:
可用工具(共37个)
集装箱操作(15个工具)
list_containers
列出所有Docker容器(正在运行或全部)
{
"all": true
}
create_container
创建一个新的Docker容器
{
"image": "nginx:latest",
"name": "my-nginx",
"command": ["nginx", "-g", "daemon off;"],
"env": ["NODE_ENV=production"],
"exposedPorts": {"80/tcp": {}},
"hostConfig": {
"PortBindings": {"80/tcp": [{"HostPort": "8080"}]},
"Binds": ["/host/path:/container/path"]
}
}
run_container
创建并启动容器(推荐)
{
"image": "python:3.9",
"name": "my-python-app",
"command": ["python", "app.py"],
"env": ["DEBUG=true", "PORT=5000"]
}
start_container
启动已停止的容器
{
"containerId": "container_id_or_name"
}
stop_container
停止正在运行的容器
{
"containerId": "container_id_or_name",
"timeout": 10
}
remove_container
移除容器
{
"containerId": "container_id_or_name",
"force": false,
"volumes": false
}
inspect_container
获取详细的集装箱信息
{
"containerId": "container_id_or_name"
}
container_logs
获取容器日志
{
"containerId": "container_id_or_name",
"tail": 100,
"follow": false
}
exec_container 🆕
在正在运行的容器中执行命令
{
"containerId": "container_id_or_name",
"command": ["ls", "-la", "/app"],
"workingDir": "/app",
"env": ["DEBUG=true"]
}
container_stats 🆕
获取实时资源使用统计数据(CPU、内存、网络、I/O)
{
"containerId": "container_id_or_name",
"stream": false
}
restart_container 🆕
重启Docker容器
{
"containerId": "container_id_or_name",
"timeout": 10
}
pause_container 🆕
暂停容器内的所有进程
{
"containerId": "container_id_or_name"
}
unpause_container 🆕
取消容器内所有进程的暂停
{
"containerId": "container_id_or_name"
}
rename_container 🆕
重命名Docker容器
{
"containerId": "container_id_or_name",
"newName": "new-container-name"
}
prune_containers 🆕
移除所有已停止的容器
{}
图像操作(7个工具)
list_images
列出Docker镜像
{
"all": false
}
pull_image
从注册表中提取图像
{
"image": "nginx:latest"
}
build_image 🆕
从Dockerfile构建Docker镜像
{
"context": "/path/to/build/context",
"dockerfile": "Dockerfile",
"tag": "myimage:latest",
"buildArgs": {
"NODE_VERSION": "18"
}
}
tag_image 🆕
用新名称/标签标记图像
{
"image": "myimage:latest",
"repo": "myrepo/myimage",
"tag": "v1.0.0"
}
push_image 🆕
将映像推送到Docker注册表
{
"image": "myrepo/myimage:v1.0.0"
}
remove_image 🆕
删除Docker镜像
{
"image": "image_id_or_name",
"force": false
}
prune_images 🆕
删除未使用的图像
{
"all": false
}
网络操作(7个工具)
list_networks
列出Docker网络
{}
create_network 🆕
创建Docker网络
{
"name": "my-network",
"driver": "bridge",
"internal": false
}
inspect_network 🆕
获取有关网络的详细信息
{
"networkId": "network_id_or_name"
}
connect_network 🆕
将容器连接到网络
{
"networkId": "network_id_or_name",
"containerId": "container_id_or_name"
}
disconnect_network 🆕
断开容器与网络的连接
{
"networkId": "network_id_or_name",
"containerId": "container_id_or_name",
"force": false
}
remove_network 🆕
删除Docker网络
{
"networkId": "network_id_or_name"
}
prune_networks 🆕
删除所有未使用的网络
{}
批量操作(5个工具)
list_volumes
列出Docker卷
{}
create_volume 🆕
创建Docker卷
{
"name": "my-volume",
"driver": "local",
"labels": {
"environment": "production"
}
}
inspect_volume 🆕
获取卷的详细信息
{
"volumeName": "volume_name"
}
remove_volume 🆕
删除Docker卷
{
"volumeName": "volume_name",
"force": false
}
prune_volumes 🆕
删除所有未使用的卷
{}
系统操作(3个工具)
system_info 🆕
获取Docker系统信息
{}
system_version 🆕
获取Docker版本信息
{}
validate_connection 🆕
验证Docker连接并测试基本操作。返回连接状态、配置详细信息和测试结果。有助于解决连接问题。
{}
主要功能:数组处理
此MCP服务器正确处理以下阵列:
- 命令:作为字符串数组传递
["python", "app.py", "--port", "8000"] - 入口点:作为字符串数组传递
["/bin/bash", "-c"] - 环境变量:作为数组传递
KEY=VALUE字符串["NODE_ENV=production", "PORT=3000"] - 卷绑定:作为绑定字符串数组传递
["/host/path:/container/path"]
这解决了常见的“数组问题”,即MCP服务器错误地期望字符串而不是数组,从而在与VS Code和GitHub Copilot集成时导致错误。
发展
脚本
npm run build-将TypeScript编译为JavaScriptnpm run watch-开发观看模式npm start-运行已编译的服务器npm run dev-构建并运行
项目结构
Docker-MCP/
├── src/
│ └── index.ts # Main server implementation
├── dist/ # Compiled JavaScript output
├── package.json # Project dependencies
├── tsconfig.json # TypeScript configuration
└── README.md # This file
故障排除
Docker连接问题
如果出现“无法连接到Docker守护进程”错误:
- 确保Docker正在运行:
docker ps - 检查Docker套接字权限
- 在Linux上:将您的用户添加到docker组:
sudo usermod -aG docker $USER
远程Docker连接问题
如果你无法连接到远程Docker主机:
-
TCP连接问题:
- 确保Docker守护进程配置为侦听TCP:检查
/etc/docker/daemon.json - 验证端口是否打开:
telnet remote-host 2375 - 检查远程主机上的防火墙规则
- 确保
DOCKER_HOST环境变量设置正确
- 确保Docker守护进程配置为侦听TCP:检查
-
TLS/HTTPS连接问题:
- 验证证书是否在正确的目录中
- 检查证书文件名:
ca.pem,cert.pem,key.pem - 确保证书可读:
chmod 644 ca.pem cert.pem key.pem - 验证
DOCKER_TLS_VERIFY=1和DOCKER_CERT_PATH已设置 - 首先使用Docker CLI进行测试:
docker --tlsverify --host=tcp://remote-host:2376 ps
-
SSH隧道问题:
- 验证SSH隧道是否正在运行:
ps aux | grep ssh - 试验隧道:
curl http://localhost:2375/version - 确保本地端口尚未使用:
lsof -i :2375 - 如果连接丢失,请尝试重新连接隧道
- 验证SSH隧道是否正在运行:
VS代码集成问题
如果MCP服务器未出现在VS代码中:
- 验证路径
dist/index.js是绝对的 - 检查服务器是否成功构建:
npm run build - 更新MCP设置后重新启动VS代码
- 检查VS代码输出面板是否存在与MCP相关的错误
- 验证MCP设置中的环境变量是否正确
数组相关错误
此服务器是专门为正确处理阵列而设计的。如果遇到数组错误:
- 确保为传递数组
command,entrypoint,以及env领域 - 验证工具参数中的JSON格式
- 检查数组是否包含字符串项
贡献
欢迎投稿!请随时提交拉取请求。
开发流程
本项目遵循行业标准做法:
- 分支策略:Git流(请参见 BRANCHING.md)
- 版本控制:语义版本控制2.0.0(参见 版本.md)
- 承诺公约:常规承诺
- CI/CD:通过GitHub Actions自动测试和发布
贡献者快速入门
- 克隆该仓库
- 创建要素分支:
git checkout -b feature/my-feature - 使用常规提交进行更改
- 确保测试通过:
npm test - 推送并创建拉取请求
develop
有关详细指南,请参阅 贡献.md.
分支结构
main-生产发布(受保护)develop-集成分支(受保护)feature/*-新功能bugfix/*-Bug修复hotfix/*-关键生产修复
发布过程
当标签被推送时,通过GitHub Actions自动发布:
# Create release branch
git checkout -b release/2.1.0
# Update version and changelog
npm version minor
# Merge to main and tag
git checkout main
git merge --no-ff release/2.1.0
git tag -a v2.1.0 -m "Version 2.1.0"
git push origin main --tags
看 版本.md 完整的发布程序。
有关详细的使用示例,请参阅 示例.md.
有关配置帮助,请参阅 配置.md.
文档
用户文档
- README.md -主要文档和快速入门
- 配置.md -配置选项和设置
- 示例.md -所有工具的使用示例
- 远程设置.md -远程Docker连接设置
- MIGRATION.md -版本升级迁移指南
开发者文档
- 贡献.md -贡献指南和工作流程
- BRANCHING.md -Git流分支策略
- 版本.md -语义版本控制和发布过程
- 发布_ GIDE.md -npm包发布程序
- 品牌保护.md -分支保护设置指南
- 更改日志.md -版本历史和更改
- 安全.md -安全策略和报告
许可证
MIT许可证-有关详细信息,请参阅许可证文件
作者
黑龙eternusprocer@gmail.com)