Docker MCP 服务器是一个模型上下文协议(MCP)服务器,为 AI 助手和应用程序提供 Docker 容器执行能力。该服务器允许在容器化环境中隔离执行命令和进行文件操作。
# 直接使用 npx 运行(无需安装)
npx docker-mcp-server
# 使用自定义容器名称运行
npx docker-mcp-server --container-name my-container
# 显示帮助和可用选项
npx docker-mcp-server --help
前提条件:必须安装并运行 Docker,且有可用的容器。
# 全局安装
npm install -g docker-mcp-server
# 从任意位置运行
docker-mcp-server --container-name my-container
git clone
cd docker-mcp
npm install
# 重置并启动 Docker 环境
./reset-docker.sh
此脚本将:
/tmp 目录# 构建 TypeScript
npm run build
# 启动 MCP 服务器(使用默认容器名称:mcp-container)
npm start
# 使用自定义容器名称启动
npm start -- --container-name my-custom-container
# 或者在一个命令中构建并启动
npm run dev
# 使用自定义容器构建并启动
npm run dev -- --container-name my-custom-container
此 MCP 服务器充当 MCP 客户端(如 Claude Code)和 Docker 容器环境之间的桥梁:
MCP Client (Claude Code) ↔ MCP Server ↔ Docker Container (Debian + Node.js)
↓
Host ./tmp directory
src/index.ts) - 使用 @modelcontextprotocol/sdk 的 TypeScript 服务器。./tmp 目录挂载到容器的 /app 以实现持久化。MCP 服务器支持以下命令行选项:
# 显示帮助和可用选项
node dist/index.js --help
# 使用默认容器名称(mcp-container)启动
node dist/index.js
# 使用自定义容器名称启动
node dist/index.js --container-name my-dev-container
node dist/index.js -c my-dev-container
# 显示版本
node dist/index.js --version
你可以通过以下几种方式配置 Docker 容器名称:
mcp-container。--container-name 或 -c 标志。# 终端 1:开发容器
npm run dev -- --container-name dev-container
# 终端 2:测试容器
npm run dev -- --container-name test-container
# 终端 3:生产容器
npm run dev -- --container-name prod-container
要将此服务器与 Claude Desktop 等 MCP 客户端一起使用,请添加以下配置:
添加到你的 Claude Desktop 配置文件中: 位置:
~/Library/Application Support/Claude/claude_desktop_config.json%APPDATA%/Claude/claude_desktop_config.json配置:
{
"mcpServers": {
"docker-mcp": {
"command": "npx",
"args": [
"-y", "docker-mcp-server@latest"
]
}
}
}
使用自定义容器:
{
"mcpServers": {
"docker-mcp": {
"command": "npx",
"args": [
"-y", "docker-mcp-server@latest",
"--container-name", "my-dev-container"
]
}
}
}
对于其他 MCP 客户端,请使用以下命令:
npx -y docker-mcp-server@latest
docker run -d --name mcp-container -v ./workspace:/app node:current-bookworm sleep infinity
/app。配置完成后,Claude Desktop 应显示 Docker MCP 服务器已连接,并可以访问所有基于容器的开发工具。
# 重置 Docker 环境(停止容器、清理 /tmp、重新启动)
./reset-docker.sh
# 在后台启动容器
docker-compose up -d
# 停止并移除容器
docker-compose down
# 进入容器的交互式 shell
docker exec -it mcp-container bash
# 将 TypeScript 编译为 JavaScript 到 /dist
npm run build
# 运行编译后的 MCP 服务器
npm start
# 在一个命令中构建并启动
npm run dev
服务器为 MCP 客户端提供以下工具:
execute_command在 Docker 容器内执行 shell 命令 在容器环境中执行任何 shell 命令,并进行智能进程跟踪和超时处理。
参数:
command(字符串) - 要在容器中执行的 shell 命令。rationale(字符串) - 解释为什么要执行此命令。maxWaitTime(数字,可选) - 在返回给代理之前等待的最大秒数(默认:20)。特性:
check_process按 ID 监控后台进程
检查由 execute_command 启动的后台进程的状态和输出。
参数:
processId(字符串) - 长时间运行命令返回的进程 ID。rationale(字符串) - 解释为什么需要检查此进程。返回值:
send_input向正在运行的后台进程发送输入 向等待用户输入的交互式进程发送输入数据。
参数:
processId(字符串) - 正在运行的进程的进程 ID。input(字符串) - 要发送给进程的输入。rationale(字符串) - 解释为什么需要向此进程发送输入。autoNewline(布尔值,可选) - 是否自动添加换行符(默认:true)。file_read从容器文件系统中读取文件 通过偏移量和限制参数支持读取大文件。
参数:
filePath(字符串) - 要读取的文件的路径(相对于容器中的 /app)。rationale(字符串) - 解释为什么需要读取此文件。offset(数字,可选) - 起始行号(从 0 开始,默认:0)。limit(数字,可选) - 要读取的最大行数(默认:2000)。特性:
file_write在容器中创建或覆盖文件 在进行安全检查和目录创建的情况下将内容写入文件。
参数:
filePath(字符串) - 要写入的文件的路径(相对于容器中的 /app)。content(字符串) - 要写入文件的内容。rationale(字符串) - 解释为什么需要写入此文件。安全特性:
重要提示:在写入之前,必须先使用 file_read 了解文件的当前状态和上下文。
file_edit在文件中进行精确的字符串替换 使用精确的字符串匹配和替换进行文件编辑,并提供备份保护。
参数:
filePath(字符串) - 要编辑的文件的路径(相对于容器中的 /app)。oldString(字符串) - 要替换的精确文本。newString(字符串) - 替换文本。rationale(字符串) - 解释为什么需要编辑此文件。replaceAll(布尔值,可选) - 是否替换所有匹配项(默认:false)。安全特性:
重要提示:必须先使用 file_read 获取要匹配的精确文本,并了解文件的当前状态。
file_ls使用过滤功能列出目录内容 使用智能过滤和输出限制列出文件和目录。
参数:
path(字符串,可选) - 要列出的目录路径(默认:当前目录)。rationale(字符串) - 解释为什么需要列出此目录。ignore(字符串数组,可选) - 要忽略的 glob 模式列表。特性:
file_grep使用正则表达式支持搜索文件内容 使用强大的 grep 功能在文件中搜索模式,并设置结果限制。
参数:
pattern(字符串) - 搜索模式(支持正则表达式)。rationale(字符串) - 解释为什么需要搜索此模式。path(字符串,可选) - 要搜索的目录(默认:当前目录)。include(字符串,可选) - 要包含的文件模式(例如,'.js'、'.{ts,tsx}')。caseInsensitive(布尔值,可选) - 不区分大小写的搜索(默认:false)。maxResults(数字,可选) - 要返回的最大结果数(默认:100)。特性:
命令运行时具有智能超时处理:
# 长时间运行的命令自动转为后台运行
process_id = execute_command("npm install", "Installing dependencies")
# 稍后检查状态
check_process(process_id, "Checking installation progress")
# 向交互式进程发送输入
send_input(process_id, "y\n", "Confirming prompt")
⚠️ 重要安全提示
- 此服务器为 MCP 客户端提供直接的 Docker 容器访问权限。
- 容器可以访问主机的
./tmp目录。- 命令以容器级权限运行。
- 通过主机网络模式启用网络访问。
./tmp 目录的内容。容器无法启动:
# 检查 Docker 是否正在运行
docker info
# 重置环境
./reset-docker.sh
权限错误:
# 确保 tmp 目录可写
chmod 755 ./tmp
MCP 服务器连接问题:
# 检查服务器是否正在运行
npm run build && npm start
# 验证容器是否可访问
docker exec -it mcp-container echo "Hello"
容器名称错误:
# 检查你的容器是否存在
docker ps -a
# 列出所有容器以查找正确的名称
docker ps --format "table {{.Names}}\t{{.Status}}"
# 使用正确的容器名称启动
npm start -- --container-name your-actual-container-name
# 服务器将在启动时验证容器是否存在
多容器设置:
# 使用不同的名称启动额外的容器
docker run -d --name dev-container -v ./tmp:/app node:current-bookworm sleep infinity
docker run -d --name test-container -v ./tmp:/app node:current-bookworm sleep infinity
# 为每个容器运行 MCP 服务器
npm run dev -- --container-name dev-container # 终端 1
npm run dev -- --container-name test-container # 终端 2
进程超时:
execute_command 中的 maxWaitTime 参数。check_process 监控长时间运行的操作。git checkout -b feature/amazing-feature)git commit -m 'Add amazing feature')git push origin feature/amazing-feature)要将此包发布到 npm 以供全局使用:
npm loginpackage.json:author:你的姓名和电子邮件repository:你的 GitHub 仓库 URLhomepage:你的项目主页bugs:你的问题 URL# 1. 更新版本(补丁/次要/主要)
npm version patch
# 2. 构建项目
npm run build
# 3. 在本地测试包
npm pack
npm install -g ./docker-mcp-server-1.0.1.tgz
# 4. 测试 npx 功能
npx docker-mcp-server --help
# 5. 发布到 npm
npm publish
# 6. 验证安装是否正常工作
npx docker-mcp-server@latest --help
https://www.npmjs.com/package/docker-mcp-server 上可用。npx docker-mcp-server 运行它。npm install -g docker-mcp-server本项目采用 MIT 许可证 - 有关详细信息,请参阅 LICENSE 文件。
CLAUDE.md 文件以获取 AI 助手特定的指南。为模型上下文协议生态系统构建 🤖