docker-compose.yml•2.86 kB
# filepath: /Users/huweihua/java/stock-mcp/docker-compose.yml
version: "3.8"
services:
# Redis 服务 - 用于缓存
redis:
image: redis:7-alpine
container_name: stock-mcp-redis
restart: unless-stopped
ports:
- "6380:6379"
volumes:
- redis_data:/data
command: redis-server --appendonly yes
networks:
- stock-network
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 10s
timeout: 3s
retries: 3
# 股票 MCP 服务
stock-mcp:
build:
context: .
dockerfile: Dockerfile
container_name: stock-mcp-server
restart: unless-stopped
ports:
- "9998:9998" # FastAPI Web 服务器
- "9999:9999" # MCP 服务器
# 配置 DNS 服务器,解决网络连接问题
dns:
- 8.8.8.8
- 114.114.114.114
- 223.5.5.5
# 添加宿主机映射,支持容器访问宿主机服务(如代理)
extra_hosts:
- "host.docker.internal:host-gateway"
environment:
# 服务器配置
- HOST=0.0.0.0
- PORT=9998
- DEBUG=false
# MCP 服务器配置
- MCP_SERVER_NAME=stock-data-server
- MCP_SERVER_VERSION=1.0.0
# Redis 配置
- REDIS_HOST=redis
- REDIS_PORT=6379
- REDIS_DB=0
# 代理配置(访问国外数据源如 yfinance)
# 容器访问宿主机代理使用 host.docker.internal
- HTTP_PROXY=${HTTP_PROXY:-http://host.docker.internal:7890}
- HTTPS_PROXY=${HTTPS_PROXY:-http://host.docker.internal:7890}
- NO_PROXY=${NO_PROXY:-localhost,127.0.0.1,redis,stock-mcp-redis}
- YFINANCE_PROXY=${YFINANCE_PROXY:-http://host.docker.internal:7890}
# AKShare 配置(增加超时时间)
- AKSHARE_TIMEOUT=60
# Tushare Token (请在 .env 文件中配置)
- TUSHARE_TOKEN=${TUSHARE_TOKEN:-}
# NewsAPI Token (可选)
- NEWS_API_KEY=${NEWS_API_KEY:-}
# Finnhub Token (可选)
- FINNHUB_API_KEY=${FINNHUB_API_KEY:-}
# Tavily Token (可选)
- TAVILY_API_KEY=${TAVILY_API_KEY:-}
# Python 环境变量
- PYTHONPATH=/app
- PYTHONDONTWRITEBYTECODE=1
- PYTHONUNBUFFERED=1
- HOME=/root
# 网络超时和重试配置
- REQUESTS_TIMEOUT=60
- HTTP_RETRY_TOTAL=5
- HTTP_RETRY_BACKOFF=1
volumes:
# 如果需要持久化日志,可以挂载日志目录
- ./logs:/app/logs
depends_on:
redis:
condition: service_healthy
networks:
- stock-network
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:9998/health"]
interval: 30s
timeout: 10s
retries: 3
start_period: 10s
# 网络配置
networks:
stock-network:
driver: bridge
name: stock-mcp-network
# 数据卷配置
volumes:
redis_data:
name: stock-mcp-redis-data