version: '3.8' services: otelcol-mcp: build: context: . dockerfile: Dockerfile container_name: otelcol-mcp-dev ports: # MCP HTTP Server (SSE) - "9999:9999" # OTLP gRPC - "4317:4317" # OTLP HTTP - "4318:4318" # Prometheus metrics (collector internal) - "8888:8888" # Prometheus exporter - "8889:8889" # Health check - "13133:13133" # Zpages - "55679:55679" # pprof - "1777:1777" # Jaeger gRPC - "14250:14250" # Jaeger HTTP - "14268:14268" # Zipkin - "9411:9411" volumes: # Mount config file - ./config.yaml:/etc/otelcol/config.yaml:ro # Persist file exporter output - ./output:/tmp:rw environment: # Override config values via env vars - OTEL_SERVICE_NAME=otelcol-mcp-dev restart: unless-stopped stdin_open: true # Enable stdin for MCP stdio transport tty: true # Allocate a pseudo-TTY for interactive mode healthcheck: test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://localhost:13133/"] interval: 30s timeout: 10s retries: 3 start_period: 40s # Optional: Prometheus for metrics visualization prometheus: image: prom/prometheus:latest container_name: prometheus ports: - "9090:9090" volumes: - ./prometheus.yaml:/etc/prometheus/prometheus.yml:ro - prometheus-data:/prometheus command: - '--config.file=/etc/prometheus/prometheus.yml' - '--storage.tsdb.path=/prometheus' depends_on: - otelcol-mcp restart: unless-stopped profiles: - monitoring # Optional: Grafana for visualization grafana: image: grafana/grafana:latest container_name: grafana ports: - "3000:3000" volumes: - grafana-data:/var/lib/grafana environment: - GF_SECURITY_ADMIN_PASSWORD=admin - GF_USERS_ALLOW_SIGN_UP=false depends_on: - prometheus restart: unless-stopped profiles: - monitoring volumes: prometheus-data: grafana-data: