-
-
Notifications
You must be signed in to change notification settings - Fork 34
Docker Integration
Saros Industries edited this page Jun 28, 2025
·
2 revisions
Docker integration within the CursorRIPER.sigma framework provides containerized Model Context Protocol (MCP) services, enabling scalable and isolated execution environments for various framework components.
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β CursorRIPER.sigma Framework β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β βββββββββββββββ βββββββββββββββ βββββββββββββββ β
β β MCP-1 β β MCP-2 β β MCP-N β β
β β Container β β Container β β Container β β
β βββββββββββββββ βββββββββββββββ βββββββββββββββ β
β β β β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β Docker Engine β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β Host System β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
- Docker Engine 20.10+
- Docker Compose 2.0+
- Minimum 4GB RAM
- 10GB available disk space
- CursorRIPER.sigma framework v1.0+
- Node.js 18+ (for MCP client)
- Python 3.8+ (for MCP server components)
Windows:
# Download and install Docker Desktop from docker.com
# Or use Chocolatey
choco install docker-desktopLinux (Ubuntu/Debian):
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
sudo usermod -aG docker $USERmacOS:
# Download Docker Desktop from docker.com
# Or use Homebrew
brew install --cask docker# Navigate to framework directory
cd "D:\Cursor Projects\CursorRIPER.sigma"
# Initialize Docker MCP configuration
npm run docker:init
# Or manually create configuration
mkdir -p docker/mcpCreate docker/mcp/docker-compose.yml:
version: '3.8'
services:
mcp-server:
build:
context: ./server
dockerfile: Dockerfile
ports:
- "3000:3000"
environment:
- NODE_ENV=production
- MCP_CONFIG_PATH=/app/config
volumes:
- ./config:/app/config:ro
- ./data:/app/data
- ./logs:/app/logs
restart: unless-stopped
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:3000/health"]
interval: 30s
timeout: 10s
retries: 3
mcp-client:
build:
context: ./client
dockerfile: Dockerfile
depends_on:
- mcp-server
environment:
- MCP_SERVER_URL=http://mcp-server:3000
- CLIENT_CONFIG_PATH=/app/config
volumes:
- ./config:/app/config:ro
- ./client-data:/app/data
restart: unless-stopped
mcp-redis:
image: redis:7-alpine
ports:
- "6379:6379"
volumes:
- redis-data:/data
restart: unless-stopped
command: redis-server --appendonly yes
volumes:
redis-data:
networks:
default:
name: mcp-networkCreate docker/mcp/server/Dockerfile:
FROM node:18-alpine
WORKDIR /app
# Install dependencies
COPY package*.json ./
RUN npm ci --only=production
# Copy application code
COPY src/ ./src/
COPY config/ ./config/
# Create necessary directories
RUN mkdir -p /app/data /app/logs
# Set up non-root user
RUN addgroup -g 1001 -S mcp && \
adduser -S mcp -u 1001 -G mcp
RUN chown -R mcp:mcp /app
USER mcp
EXPOSE 3000
HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \
CMD curl -f http://localhost:3000/health || exit 1
CMD ["npm", "start"]Update framework.config.js:
module.exports = {
mcp: {
enabled: true,
docker: {
enabled: true,
compose_file: './docker/mcp/docker-compose.yml',
auto_start: true,
health_check_timeout: 30000
},
servers: [
{
name: 'primary-mcp',
container: 'mcp-server',
url: 'http://localhost:3000',
capabilities: ['analysis', 'processing', 'storage']
}
],
clients: [
{
name: 'framework-client',
container: 'mcp-client',
server: 'primary-mcp',
timeout: 10000
}
]
}
};Create src/services/MCPDockerManager.js:
const { exec } = require('child_process');
const Docker = require('dockerode');
const path = require('path');
class MCPDockerManager {
constructor(config) {
this.config = config;
this.docker = new Docker();
this.composePath = path.resolve(config.docker.compose_file);
}
async initialize() {
try {
await this.ensureNetwork();
await this.startServices();
await this.waitForHealthChecks();
console.log('MCP Docker services initialized successfully');
} catch (error) {
console.error('Failed to initialize MCP Docker services:', error);
throw error;
}
}
async ensureNetwork() {
try {
await this.docker.getNetwork('mcp-network').inspect();
} catch (error) {
console.log('Creating MCP network...');
await this.docker.createNetwork({
Name: 'mcp-network',
Driver: 'bridge'
});
}
}
async startServices() {
return new Promise((resolve, reject) => {
const cmd = `docker-compose -f "${this.composePath}" up -d`;
exec(cmd, (error, stdout, stderr) => {
if (error) {
reject(new Error(`Failed to start services: ${error.message}`));
return;
}
console.log('MCP services started');
resolve();
});
});
}
async waitForHealthChecks() {
const maxWait = this.config.docker.health_check_timeout;
const startTime = Date.now();
while (Date.now() - startTime < maxWait) {
try {
const container = this.docker.getContainer('mcp-server');
const inspect = await container.inspect();
if (inspect.State.Health?.Status === 'healthy') {
return;
}
} catch (error) {
// Container might not be ready yet
}
await new Promise(resolve => setTimeout(resolve, 2000));
}
throw new Error('Health check timeout exceeded');
}
async stop() {
return new Promise((resolve, reject) => {
const cmd = `docker-compose -f "${this.composePath}" down`;
exec(cmd, (error, stdout, stderr) => {
if (error) {
reject(new Error(`Failed to stop services: ${error.message}`));
return;
}
console.log('MCP services stopped');
resolve();
});
});
}
async restart() {
await this.stop();
await this.initialize();
}
async getLogs(service = 'mcp-server', lines = 100) {
return new Promise((resolve, reject) => {
const cmd = `docker-compose -f "${this.composePath}" logs --tail=${lines} ${service}`;
exec(cmd, (error, stdout, stderr) => {
if (error) {
reject(error);
return;
}
resolve(stdout);
});
});
}
async getStatus() {
try {
const containers = await this.docker.listContainers({
filters: { label: ['com.docker.compose.project=mcp'] }
});
return containers.map(container => ({
name: container.Names[0].replace('/', ''),
status: container.State,
ports: container.Ports,
created: container.Created
}));
} catch (error) {
throw new Error(`Failed to get status: ${error.message}`);
}
}
}
module.exports = MCPDockerManager;// In your framework initialization
const MCPDockerManager = require('./src/services/MCPDockerManager');
const config = require('./framework.config');
const mcpManager = new MCPDockerManager(config.mcp);
// Initialize MCP services
await mcpManager.initialize();
// Use MCP services through framework
const result = await framework.mcp.analyze(data);# Custom analysis container
FROM python:3.9-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY analysis/ ./analysis/
EXPOSE 8000
CMD ["python", "-m", "analysis.server"]// Automatic service discovery
class FrameworkMCPClient {
constructor(dockerManager) {
this.dockerManager = dockerManager;
this.services = new Map();
}
async discoverServices() {
const containers = await this.dockerManager.getStatus();
for (const container of containers) {
if (container.name.includes('mcp-')) {
const serviceInfo = await this.inspectService(container);
this.services.set(serviceInfo.name, serviceInfo);
}
}
}
async callService(serviceName, method, params) {
const service = this.services.get(serviceName);
if (!service) {
throw new Error(`Service ${serviceName} not found`);
}
// Make RPC call to containerized service
return await this.makeRPCCall(service.endpoint, method, params);
}
}# Check service health
docker-compose -f docker/mcp/docker-compose.yml ps
# View logs
docker-compose -f docker/mcp/docker-compose.yml logs -f mcp-server
# Check resource usage
docker stats mcp-server mcp-client mcp-redisCreate scripts/mcp-maintenance.sh:
#!/bin/bash
MCP_DIR="docker/mcp"
case "$1" in
"start")
echo "Starting MCP services..."
docker-compose -f "$MCP_DIR/docker-compose.yml" up -d
;;
"stop")
echo "Stopping MCP services..."
docker-compose -f "$MCP_DIR/docker-compose.yml" down
;;
"restart")
echo "Restarting MCP services..."
docker-compose -f "$MCP_DIR/docker-compose.yml" restart
;;
"logs")
docker-compose -f "$MCP_DIR/docker-compose.yml" logs -f "${2:-mcp-server}"
;;
"clean")
echo "Cleaning up MCP resources..."
docker-compose -f "$MCP_DIR/docker-compose.yml" down -v
docker system prune -f
;;
"backup")
echo "Backing up MCP data..."
docker run --rm -v mcp_redis-data:/data -v $(pwd)/backups:/backup \
alpine tar czf /backup/mcp-redis-$(date +%Y%m%d_%H%M%S).tar.gz -C /data .
;;
*)
echo "Usage: $0 {start|stop|restart|logs|clean|backup}"
exit 1
;;
esac# docker/mcp/docker-compose.override.yml
version: '3.8'
services:
watchtower:
image: containrrr/watchtower
volumes:
- /var/run/docker.sock:/var/run/docker.sock
environment:
- WATCHTOWER_POLL_INTERVAL=3600
- WATCHTOWER_CLEANUP=true
- WATCHTOWER_INCLUDE_STOPPED=true
command: mcp-server mcp-client# Secure network configuration
networks:
mcp-internal:
driver: bridge
internal: true
mcp-external:
driver: bridge
services:
mcp-server:
networks:
- mcp-internal
- mcp-external
mcp-redis:
networks:
- mcp-internal # No external access# Use Docker secrets for sensitive data
echo "my-secret-key" | docker secret create mcp_api_key -
# Reference in compose file
services:
mcp-server:
secrets:
- mcp_api_key
environment:
- API_KEY_FILE=/run/secrets/mcp_api_key
secrets:
mcp_api_key:
external: trueservices:
mcp-server:
deploy:
resources:
limits:
cpus: '2.0'
memory: 1G
reservations:
cpus: '0.5'
memory: 512M
security_opt:
- no-new-privileges:true
read_only: true
tmpfs:
- /tmp- Port Conflicts: Change ports in docker-compose.yml
- Permission Issues: Check file ownership and Docker daemon permissions
- Network Issues: Verify Docker network configuration
- Resource Limits: Monitor memory and CPU usage
# Check Docker daemon
docker info
# Inspect containers
docker inspect mcp-server
# Check networks
docker network ls
docker network inspect mcp-network
# View container processes
docker top mcp-serverLast Updated: June 28, 2025
Framework Version: CursorRIPER.sigma v1.0+
Docker Integration Version: 1.0.0
- ποΈ Framework Overview
- π RIPER Modes
- πΎ Memory System
- π£ Symbolic Notation
- π Phase Management
- π‘οΈ Code Protection
- π Context References
- π Permission System
- π Cross-References
- πΎ Backup System
- π Mode Transitions
- πΎ Memory Management
- π‘οΈ Protection Workflow
- π Context Management
- π₯ Team Collaboration
- π£ Symbol Reference
- β¨οΈ Command Reference
- π Mode Reference
- π Permission Matrix
- π API Reference
- π Overview
- π GitHub Integration
- π Web Search
- π Browser Automation
- π³ Docker Integration
-
Installation Issues
- Node.js Version Compatibility
- Package Installation Failures
- Framework Dependencies Missing
- Database Connection Issues
- Port Conflicts
- Environment Setup Issues
- Build and Development Issues
- Framework CLI Issues
-
Configuration & Runtime Issues
- Framework Configuration Problems
- Runtime Performance Issues
- Module Loading and Plugin Issues
- Database and Storage Issues
- Memory Leaks and High Memory Usage
- High CPU Usage
-
BMAD Module Issues
- BMAD Module Initialization Problems
- Business Model Canvas Issues
- Stakeholder Management Issues
- Analytics and Reporting Issues
- Performance Optimization
-
Database & API Issues
- Database Connection Problems
- Database Migration Issues
- API Performance and Reliability Issues
- Data Consistency Issues
- Transaction Problems
-
Performance & Memory Issues
- Memory Management
- CPU Optimization
- Database Query Performance
- Caching Issues
- Resource Monitoring
-
Security & Authentication Issues
- Authentication Failures
- Authorization Problems
- JWT Token Issues
- Session Management
- CORS and Security Headers
- SSL/TLS Configuration
-
Deployment & Production Issues
- Production Deployment Failures
- Environment Configuration
- Load Balancing Issues
- Monitoring and Logging
- Backup and Recovery
When reporting issues, please include:
- Framework version (
npm list @cursoriper/core) - Node.js version (
node --version) - Operating system and version
- Error messages and stack traces
- Steps to reproduce the issue
- Configuration files (sanitized)
- Recent changes or deployments
- Technical Support: support@cursoriper.com
- Documentation: https://docs.cursoriper.com
- Community Forum: https://community.cursoriper.com