# GhydraMCP Docker Compose Configuration # Provides both development and production modes for Ghidra + GhydraMCP # # Usage: # Development: docker compose up ghydramcp-dev # Production: docker compose up ghydramcp # # Set MODE in .env file to switch between dev/prod behaviors services: # ============================================================================= # Production Service - Optimized for stability and security # ============================================================================= ghydramcp: build: context: . dockerfile: docker/Dockerfile args: GHIDRA_VERSION: ${GHIDRA_VERSION:-11.4.2} GHIDRA_DATE: ${GHIDRA_DATE:-20250826} image: ghydramcp:${GHYDRAMCP_VERSION:-latest} container_name: ${COMPOSE_PROJECT_NAME:-ghydramcp}-server restart: unless-stopped ports: - "${GHYDRA_PORT:-8192}:8192" volumes: # Mount binaries to analyze (read-only in prod) - ${BINARIES_PATH:-./binaries}:/binaries:ro # Persist Ghidra projects between runs - ghydra-projects:/projects environment: - GHYDRA_MODE=${GHYDRA_MODE:-headless} - GHYDRA_PORT=8192 - GHYDRA_MAXMEM=${GHYDRA_MAXMEM:-2G} - PROJECT_NAME=${PROJECT_NAME:-GhydraMCP} healthcheck: test: ["CMD", "curl", "-f", "http://localhost:8192/"] interval: 30s timeout: 10s start_period: 60s retries: 3 deploy: resources: limits: memory: ${GHYDRA_MAXMEM:-2G} profiles: - prod - default # ============================================================================= # Development Service - Hot-reload and debugging friendly # ============================================================================= ghydramcp-dev: build: context: . dockerfile: docker/Dockerfile args: GHIDRA_VERSION: ${GHIDRA_VERSION:-11.4.2} GHIDRA_DATE: ${GHIDRA_DATE:-20250826} image: ghydramcp:dev container_name: ${COMPOSE_PROJECT_NAME:-ghydramcp}-dev ports: - "${GHYDRA_PORT:-8192}:8192" # Additional ports for debugging/multiple instances - "8193:8193" - "8194:8194" volumes: # Mount binaries (read-write in dev) - ${BINARIES_PATH:-./binaries}:/binaries:rw # Persist projects - ghydra-projects-dev:/projects # Mount scripts for live editing (development only) - ./docker/GhydraMCPServer.java:/opt/ghidra/scripts/GhydraMCPServer.java:ro - ./docker/entrypoint.sh:/entrypoint.sh:ro environment: - GHYDRA_MODE=${GHYDRA_MODE:-headless} - GHYDRA_PORT=8192 - GHYDRA_MAXMEM=${GHYDRA_MAXMEM:-4G} - PROJECT_NAME=${PROJECT_NAME:-GhydraMCP-Dev} healthcheck: test: ["CMD", "curl", "-f", "http://localhost:8192/"] interval: 15s timeout: 5s start_period: 120s retries: 5 profiles: - dev # ============================================================================= # Shell Service - Interactive debugging container # ============================================================================= ghydramcp-shell: build: context: . dockerfile: docker/Dockerfile image: ghydramcp:${GHYDRAMCP_VERSION:-latest} container_name: ${COMPOSE_PROJECT_NAME:-ghydramcp}-shell stdin_open: true tty: true volumes: - ${BINARIES_PATH:-./binaries}:/binaries:rw - ghydra-projects-dev:/projects environment: - GHYDRA_MODE=shell profiles: - debug volumes: ghydra-projects: name: ${COMPOSE_PROJECT_NAME:-ghydramcp}-projects ghydra-projects-dev: name: ${COMPOSE_PROJECT_NAME:-ghydramcp}-projects-dev networks: default: name: ${COMPOSE_PROJECT_NAME:-ghydramcp}-network