Docker管理服务器

Docker MCP Server是一款专为AI助手设计的Docker管理协议服务器,提供完整的Docker容器、镜像、网络和卷管理功能,支持远程连接和TLS/SSL安全通信。

  • by Swartdraak
  • TypeScript
  • 本地部署
  • 1 星标
  • 更新于
在 GitHub 查看 Swartdraak/Docker-MCP

使用说明

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包管理器

设置

  1. 克隆存储库:
git clone https://github.com/Swartdraak/Docker-MCP.git
cd Docker-MCP
  1. 安装依赖项:
npm install
  1. 构建项目:
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

有关详细的设置说明、故障排除和特定于平台的指南,请参阅:

  • 配置.md -MCP服务器配置示例
  • 远程设置.md -全面的远程连接设置指南(包括Windows 11特定说明)

可用工具(共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编译为JavaScript
  • npm 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主机:

  1. TCP连接问题:

    • 确保Docker守护进程配置为侦听TCP:检查 /etc/docker/daemon.json
    • 验证端口是否打开: telnet remote-host 2375
    • 检查远程主机上的防火墙规则
    • 确保 DOCKER_HOST 环境变量设置正确
  2. 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
  3. SSH隧道问题:

    • 验证SSH隧道是否正在运行: ps aux | grep ssh
    • 试验隧道: curl http://localhost:2375/version
    • 确保本地端口尚未使用: lsof -i :2375
    • 如果连接丢失,请尝试重新连接隧道

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自动测试和发布

贡献者快速入门

  1. 克隆该仓库
  2. 创建要素分支: git checkout -b feature/my-feature
  3. 使用常规提交进行更改
  4. 确保测试通过: npm test
  5. 推送并创建拉取请求 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.

文档

用户文档

开发者文档

许可证

MIT许可证-有关详细信息,请参阅许可证文件

作者

黑龙eternusprocer@gmail.com)