Docker 部署
January 30, 2026 · View on GitHub
本文档介绍如何使用 Docker 部署 Universal DB MCP。
前置要求
- Docker >= 20.10
- Docker Compose >= 2.0(可选)
快速开始
使用 Docker Compose(推荐)
cd docker
docker-compose up -d
直接运行
# 构建镜像
docker build -t universal-db-mcp -f docker/Dockerfile .
# 运行容器
docker run -p 3000:3000 \
-e MODE=http \
-e API_KEYS=your-secret-key \
universal-db-mcp
Dockerfile
项目提供了优化的多阶段构建 Dockerfile:
FROM node:20-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build
FROM node:20-alpine
WORKDIR /app
COPY --from=builder /app/dist ./dist
COPY --from=builder /app/node_modules ./node_modules
COPY --from=builder /app/package.json ./
USER node
EXPOSE 3000
CMD ["node", "dist/index.js"]
Docker Compose 配置
基础配置
docker-compose.yml:
version: '3.8'
services:
universal-db-mcp:
build:
context: ..
dockerfile: docker/Dockerfile
container_name: universal-db-mcp
restart: unless-stopped
ports:
- "3000:3000"
environment:
- MODE=http
- HTTP_PORT=3000
- HTTP_HOST=0.0.0.0
env_file:
- .env.docker
healthcheck:
test: ["CMD", "wget", "-q", "--spider", "http://localhost:3000/api/health"]
interval: 30s
timeout: 10s
retries: 3
生产环境配置
docker-compose.prod.yml:
version: '3.8'
services:
universal-db-mcp:
build:
context: ..
dockerfile: docker/Dockerfile
container_name: universal-db-mcp
restart: always
ports:
- "127.0.0.1:3000:3000" # 仅本地访问,通过 Nginx 代理
environment:
- MODE=http
- HTTP_PORT=3000
- HTTP_HOST=0.0.0.0
env_file:
- .env
healthcheck:
test: ["CMD", "wget", "-q", "--spider", "http://localhost:3000/api/health"]
interval: 30s
timeout: 10s
retries: 3
start_period: 40s
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "3"
deploy:
resources:
limits:
memory: 512M
reservations:
memory: 256M
环境变量配置
创建 .env.docker 文件:
# 服务器模式
MODE=http
# HTTP 配置
HTTP_PORT=3000
HTTP_HOST=0.0.0.0
# API 密钥(重要:使用强密钥!)
API_KEYS=your-strong-api-key-here
# CORS 配置
CORS_ORIGINS=*
CORS_CREDENTIALS=false
# 速率限制
RATE_LIMIT_MAX=100
RATE_LIMIT_WINDOW=1m
# 日志
LOG_LEVEL=info
LOG_PRETTY=false
# 会话管理
SESSION_TIMEOUT=3600000
SESSION_CLEANUP_INTERVAL=300000
常用命令
构建和启动
# 构建镜像
docker-compose build
# 启动服务(后台运行)
docker-compose up -d
# 查看日志
docker-compose logs -f
# 停止服务
docker-compose down
更新版本
# 停止服务
docker-compose down
# 重新构建(拉取最新代码后)
docker-compose build --no-cache
# 启动服务
docker-compose up -d
清理
# 停止并删除容器、网络
docker-compose down
# 停止并删除容器、网络、镜像
docker-compose down --rmi all
# 清理未使用的镜像
docker image prune -f
连接数据库
连接宿主机数据库
使用 host.docker.internal:
docker run -p 3000:3000 \
-e MODE=http \
-e API_KEYS=your-key \
-e DB_TYPE=mysql \
-e DB_HOST=host.docker.internal \
-e DB_PORT=3306 \
-e DB_USER=root \
-e DB_PASSWORD=xxx \
-e DB_DATABASE=test \
universal-db-mcp
连接其他容器
使用 Docker 网络:
version: '3.8'
services:
universal-db-mcp:
# ... 配置 ...
networks:
- db-network
mysql:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: password
MYSQL_DATABASE: test
networks:
- db-network
networks:
db-network:
driver: bridge
然后使用服务名作为主机名:DB_HOST=mysql
健康检查
# 检查容器状态
docker ps
# 检查健康状态
docker inspect --format='{{.State.Health.Status}}' universal-db-mcp
# 手动测试
curl http://localhost:3000/api/health
日志管理
查看日志
# 实时日志
docker-compose logs -f
# 最近 100 行
docker-compose logs --tail 100
# 指定时间范围
docker-compose logs --since 1h
日志轮转
Docker 默认配置了日志轮转,可以在 docker-compose.yml 中自定义:
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "3"
资源限制
deploy:
resources:
limits:
cpus: '1'
memory: 512M
reservations:
cpus: '0.5'
memory: 256M
安全建议
- 不要暴露端口到公网 - 使用
127.0.0.1:3000:3000仅本地访问 - 使用 Nginx 反向代理 - 配置 SSL 和访问控制
- 使用非 root 用户 - Dockerfile 中已配置
USER node - 定期更新镜像 - 及时修复安全漏洞