DB MCP服务器——Docker镜像
   ](https://hub.docker.com/r/mekayelanik/db-mcp-server) ](https://hub.docker.com/r/mekayelanik/db-mcp-server)   ](https://go.dev)  
Unofficial multi-arch Up-to-Date Docker image for FreePeak/db-mcp-server — a powerful multi-database MCP server for AI assistants.
Credits • Images • Quick Start • Docker CLI • Docker Compose • Networking • Security & Transport • Configuration • Supported Databases • Environment Variables • MCPJungle Gateway • License
______________________________________________________________________
学分
此存储库仅提供:
- 多拱形Docker镜像(
linux/amd64,linux/arm64,linux/arm/v7) - GitHub Actions工作流,用于手动构建/发布和推广操作
- 这个以Docker为中心的使用文档
有关功能请求、错误报告和源代码贡献,请访问 上游仓库.
______________________________________________________________________
图像
图像通过手动工作流调度发布到两个注册表(Docker Build & Publish)并且意图在内容上保持相同。
通过工作流操作可以获得稳定的推广:
auto-check促进stable5天后latest年龄(符合条件时)mark-stable执行显式/手动稳定升级
| 注册表 | 图像 |
|---|---|
| Docker Hub | mekayelanik/db-mcp-server |
GHCR。 ghcr.io/mekayelanik/db-mcp-server |
标签
| 标签 | 描述 |
|---|---|
latest | 从上游手动发布的最新版本 main |
stable | 从已发布版本升级(5天后自动符合条件或手动 mark-stable) |
YYYYMMDD- | 不可变标签——准确的上游提交和构建日期,例如。 20250312-19b7975 |
YYYYMMDD | 浮动日期标签——当天的最新版本 |
平台
| 平台 | 架构 |
|---|---|
linux/amd64 | x86-64(大多数服务器、桌面Linux、WSL2) |
linux/arm64 | ARM 64位(苹果硅通过Rosetta、AWS Graviton、Raspberry Pi 4/5) |
linux/arm/v7 | ARM 32位(Raspberry Pi 2/3,较旧的ARM板) |
______________________________________________________________________
😎 给我买杯咖啡☕︎
您的支持鼓励我继续创建/支持我的开源项目。 如果你在这个项目中发现了价值,你可以给我买杯咖啡,让我保持灵感。
快速开始
# Create a config file
cat > config.json **注:** 使用Docker Compose服务名称作为 `host` 值——例如。 `postgres`, `mysql` --不是 `localhost`.
对于其他变体,重用此模式并调整服务映像+ `config.json` 连接类型/主机。
______________________________________________________________________
## 网络
### 连接到主机上的数据库
当你的数据库在主机上运行时(不是在Docker中),使用 `host.docker.internal` 而不是 `localhost`:
{ "connections": [ { "id": "host_postgres", "type": "postgres", "host": "host.docker.internal", "port": 5432, "name": "mydb", "user": "myuser", "password": "mypassword" } ] }
在Linux上, `host.docker.internal` 需要添加 `--add-host`:
docker run -d \ --name db-mcp-server \ -p 9092:9092 \ --add-host host.docker.internal:host-gateway \ -v $(pwd)/config.json:/app/config.json \ mekayelanik/db-mcp-server:latest
或者在Docker Compose中:
services: db-mcp-server: image: mekayelanik/db-mcp-server:latest extra_hosts: - "host.docker.internal:host-gateway"
______________________________________________________________________
### 加入现有网络
如果您的数据库已经在命名的Docker网络上运行:
docker run -d \ --name db-mcp-server \ -p 9092:9092 \ --network my-existing-network \ -v $(pwd)/config.json:/app/config.json \ mekayelanik/db-mcp-server:latest
在Docker Compose中,连接到外部网络:
services: db-mcp-server: image: mekayelanik/db-mcp-server:latest networks: - my-existing-network
networks: my-existing-network: external: true
______________________________________________________________________
### 暴露于局域网/远程客户端
默认情况下,容器绑定到所有接口(`0.0.0.0`).要限制到特定的主机IP,请执行以下操作:
docker run -d \ --name db-mcp-server \ -p 192.168.1.100:9092:9092 \ -v $(pwd)/config.json:/app/config.json \ mekayelanik/db-mcp-server:latest
______________________________________________________________________
### 反向代理背后(nginx示例)
upstream db_mcp { server 127.0.0.1:9092; }
server { listen 443 ssl; server_name mcp.example.com;
location / { proxy_pass http://db_mcp; proxy_http_version 1.1;
# Required for SSE (Server-Sent Events) proxy_set_header Connection ''; proxy_buffering off; proxy_cache off; chunked_transfer_encoding on;
proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } }
______________________________________________________________________
## 安全与运输
### HTTPS应该是默认设置吗?
当前默认值为 `ENABLE_HTTPS=true`.
推荐做法:
- 仅限本地开发:仍建议使用HTTPS,但您可以设置 `ENABLE_HTTPS=false` 仅支持HTTP的工具。
- 任何远程/LAN/公共使用:使用HTTPS和API密钥身份验证。
### 此MCP暴露了什么传输?
应用程序传输模式:
- `sse` (默认)通过HTTP(S)
- `stdio` (用于基于本地命令的集成)
在容器服务器模式下运行时(`TRANSPORT_MODE=sse`):
- 公众听众:HAProxy打开 `SERVER_PORT` (默认值 `9092`)
- 内部应用程序侦听器:MCP服务器上 `INTERNAL_SERVER_PORT` (默认值 `38011`,仅在容器中本地)
上游服务器暴露的常见MCP HTTP端点包括:
- `/sse`
- `/jsonrpc`
- `/message`
- `/events`
- `/status`
### API密钥身份验证行为
集 `API_KEY` 以在HAProxy中启用承载令牌保护。
预期状态行为:
- 缺少身份验证标头-> `401 Unauthorized`
- 无效密钥-> `403 Forbidden`
- 有效密钥->请求被转发到后端(后端仍可能返回 `200`, `204`, `405`等,取决于端点/方法)
笔记:
- `Bearer` 方案匹配不敏感(`Bearer`/`bearer` 两者都工作)。
- 无效的API密钥格式失败关闭:容器在启动时退出。
- `/healthz` 有一个仅用于本地主机的内部健康检查旁路。
### HTTPS和证书行为
如果 `ENABLE_HTTPS=true`,HAProxy在上提供TLS服务 `SERVER_PORT`.
默认最低TLS版本为 `TLSv1.3`.
### HTTP协议版本(可选模式)
集 `HTTP_VERSION_MODE` 以控制公共监听器上的协议协商:
- `auto` (默认):尝试 `h3` 首先,然后回到 `h2`那么 `h1` (`http/1.1`)
- `all`:行为与 `auto`
- `h1`:仅强制HTTP/1.1
- `h2`:仅通过TLS强制HTTP/2
- `h1+h2`:允许HTTP/1.1和HTTP/2
- `h3`:请求HTTP/3支持(QUIC)和标准TLS回退(`h1+h2`)
笔记:
- `h2` 和 `h3` 需要TLS(`ENABLE_HTTPS=true`).
- 如果 `ENABLE_HTTPS=false`,侦听器将回退到HTTP/1.1。
- 如果 `h3` 已请求,但HAProxy构建中的QUIC不可用,启动会记录一条警告,并在没有 `h3`.
#### 推荐的默认值和模式意图
- 生产默认值: `HTTP_VERSION_MODE=auto`
- `auto` / `all`:先尝试HTTP/3,然后是HTTP/2,然后是HTTP/1.1回退
- `h1`:严格兼容模式
- `h2`:仅通过TLS强制HTTP/2
- `h3`:使用安全的TCP回退请求HTTP/3
#### Docker CLI示例(按模式)
汽车链条(`h3 -> h2 -> h1`)(默认):
docker run -d \ --name db-mcp-auto \ -p 9092:9092 \ -p 9092:9092/udp \ -v $(pwd)/config.json:/app/config.json:ro \ -e ENABLE_HTTPS=true \ -e HTTP_VERSION_MODE=auto \ -e API_KEY='replace_with_a_strong_key' \ mekayelanik/db-mcp-server:latest
仅限HTTP/1.1:
docker run -d \ --name db-mcp-h1 \ -p 9092:9092 \ -v $(pwd)/config.json:/app/config.json:ro \ -e ENABLE_HTTPS=true \ -e HTTP_VERSION_MODE=h1 \ -e API_KEY='replace_with_a_strong_key' \ mekayelanik/db-mcp-server:latest
仅限HTTP/2:
docker run -d \ --name db-mcp-h2 \ -p 9092:9092 \ -v $(pwd)/config.json:/app/config.json:ro \ -e ENABLE_HTTPS=true \ -e HTTP_VERSION_MODE=h2 \ -e API_KEY='replace_with_a_strong_key' \ mekayelanik/db-mcp-server:latest
请求HTTP/3(加回退):
docker run -d \ --name db-mcp-h3 \ -p 9092:9092 \ -p 9092:9092/udp \ -v $(pwd)/config.json:/app/config.json:ro \ -e ENABLE_HTTPS=true \ -e HTTP_VERSION_MODE=h3 \ -e API_KEY='replace_with_a_strong_key' \ mekayelanik/db-mcp-server:latest
#### Docker编写代码片段
services: db-mcp-server: image: mekayelanik/db-mcp-server:latest ports: - "9092:9092/tcp" - "9092:9092/udp" environment: ENABLE_HTTPS: "true" HTTP_VERSION_MODE: "auto" API_KEY: "replace_with_a_strong_key" volumes: - ./config.json:/app/config.json:ro
#### 如何在运行时验证有效模式
检查启动日志:
docker logs db-mcp-auto | grep -E 'HTTP versions enabled|HTTPS enabled|falling back'
检查生成的HAProxy绑定:
docker exec db-mcp-auto sh -lc "grep -n 'bind ' /tmp/haproxy.cfg"
预计为 `auto`/`all` 当QUIC可用时:
- 一个TLS TCP与ALPN绑定 `h2,http/1.1`
- 一个QUIC与ALPN绑定 `h3`
预计为 `h1`:
- 一个TLS TCP与ALPN绑定 `http/1.1`
证书优先级:
1. 如果 `TLS_PEM_PATH` 存在,直接使用。
1. 否则,如果两者都有 `TLS_CERT_PATH` 和 `TLS_KEY_PATH` 它们被组合成PEM。
1. 否则,将使用自动生成自签名证书 `TLS_CN` 和 `TLS_SAN`.
### 使用Cloudflare Origin证书(建议在Cloudflare之后使用)
如果您的流量是通过Cloudflare代理的,请使用Cloudflare Origin证书,而不是自动生成的自签名证书。
1. 在Cloudflare Dashboard中,为您的主机名创建一个源证书,例如 `mcp.example.com`.
1. 将证书和私钥PEM内容保存到主机文件。
mkdir -p certs
Paste certificate PEM from Cloudflare
cat > certs/cloudflare-origin.crt certs/cloudflare-origin.key 重要提示: MCPJungle的SSE运输 不 支持自定义 headers 在注册配置中。这 headers 字段仅用于 streamable_http 运输。对于具有API密钥身份验证的SSE 必须 使用 bearer_token 相反。
带API密钥的SSE(正确)
注册配置(mcp1.json):
{
"name": "db-mcp-server",
"url": "http://:9092/sse",
"transport": "sse",
"bearer_token": "REPLACE_WITH_API_KEY"
}注册:
mcpjungle register -c mcp1.json不带API密钥的SSE
如果容器正在运行 API_KEY 未设置(身份验证已禁用):
{
"name": "db-mcp-server",
"url": "http://:9092/sse",
"transport": "sse"
}常见错误
以下配置将 401失败 因为 headers 在MCPJungle中,SSE传输被默默忽略:
{
"name": "db-mcp-server",
"url": "http://:9092/sse",
"transport": "sse",
"headers": {
"Authorization": "Bearer REPLACE_WITH_API_KEY"
}
}这是MCPJungle SSE客户端实现中的一个限制(createSSEMcpServerConn 在 util.go)--那个 SSEConfig struct仅支持 url 和 bearer_token,而不是任意的标题。使用 bearer_token 相反。
注: 上游 FreePeak/db mcp服务器 目前仅支持sse和stdio运输方式。流式HTTP(streamable_http)服务器尚不支持,因此仅使用"transport": "sse"在MCPJungle注册时。
Claude Code、Codex和类似客户端的快速兼容性说明
- 如果您的客户端支持基于URL的MCP服务器,请首选HTTPS+SSE模板。
- 如果您的客户端支持基于命令的MCP服务器,请使用STDIO模板。
- 如果客户端不支持URL模式下的自定义标头,请将容器放置在注入身份验证的可信反向代理后面,或使用STDIO模式。
______________________________________________________________________
许可证
此存储库(构建脚本、Dockerfile、工作流和文档)根据 GNU通用公共许可证v3.0.
______________________________________________________________________
建在上面 FreePeak/db mcp服务器
______________________________________________________________________
😎 给我买杯咖啡☕︎
您的支持鼓励我继续创建/支持我的开源项目。 如果你在这个项目中发现了价值,你可以给我买杯咖啡,让我保持灵感。
