# MCGhidra Docker Compose Configuration # Provides both development and production modes for Ghidra + MCGhidra # # Usage: # Development: docker compose up mcghidra-dev # Production: docker compose up mcghidra # # Set MODE in .env file to switch between dev/prod behaviors services: # ============================================================================= # Production Service - Optimized for stability and security # ============================================================================= mcghidra: build: context: . dockerfile: docker/Dockerfile args: GHIDRA_VERSION: ${GHIDRA_VERSION:-11.4.2} GHIDRA_DATE: ${GHIDRA_DATE:-20250826} image: mcghidra:${MCGHIDRAMCP_VERSION:-latest} container_name: ${COMPOSE_PROJECT_NAME:-mcghidra}-server restart: unless-stopped ports: - "${MCGHIDRA_PORT:-8192}:8192" volumes: # Mount binaries to analyze (read-only in prod) - ${BINARIES_PATH:-./binaries}:/binaries:ro # Persist Ghidra projects between runs - mcghidra-projects:/projects environment: - MCGHIDRA_MODE=${MCGHIDRA_MODE:-headless} - MCGHIDRA_PORT=8192 - MCGHIDRA_MAXMEM=${MCGHIDRA_MAXMEM:-2G} - PROJECT_NAME=${PROJECT_NAME:-MCGhidra} healthcheck: test: ["CMD", "curl", "-f", "http://localhost:8192/"] interval: 30s timeout: 10s start_period: 60s retries: 3 deploy: resources: limits: memory: ${MCGHIDRA_MAXMEM:-2G} profiles: - prod - default # ============================================================================= # Development Service - Hot-reload and debugging friendly # ============================================================================= mcghidra-dev: build: context: . dockerfile: docker/Dockerfile args: GHIDRA_VERSION: ${GHIDRA_VERSION:-11.4.2} GHIDRA_DATE: ${GHIDRA_DATE:-20250826} image: mcghidra:dev container_name: ${COMPOSE_PROJECT_NAME:-mcghidra}-dev ports: - "${MCGHIDRA_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 - mcghidra-projects-dev:/projects # Mount scripts for live editing (development only) - ./docker/MCGhidraServer.java:/opt/ghidra/scripts/MCGhidraServer.java:ro - ./docker/entrypoint.sh:/entrypoint.sh:ro environment: - MCGHIDRA_MODE=${MCGHIDRA_MODE:-headless} - MCGHIDRA_PORT=8192 - MCGHIDRA_MAXMEM=${MCGHIDRA_MAXMEM:-4G} - PROJECT_NAME=${PROJECT_NAME:-MCGhidra-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 # ============================================================================= mcghidra-shell: build: context: . dockerfile: docker/Dockerfile image: mcghidra:${MCGHIDRAMCP_VERSION:-latest} container_name: ${COMPOSE_PROJECT_NAME:-mcghidra}-shell stdin_open: true tty: true volumes: - ${BINARIES_PATH:-./binaries}:/binaries:rw - mcghidra-projects-dev:/projects environment: - MCGHIDRA_MODE=shell profiles: - debug volumes: mcghidra-projects: name: ${COMPOSE_PROJECT_NAME:-mcghidra}-projects mcghidra-projects-dev: name: ${COMPOSE_PROJECT_NAME:-mcghidra}-projects-dev networks: default: name: ${COMPOSE_PROJECT_NAME:-mcghidra}-network