# CPU-only ML Training Service Dockerfile # Fallback for environments without NVIDIA Container Runtime # ============================================================================= # Builder Stage # ============================================================================= FROM rust:1.83-slim AS builder # Install build dependencies RUN apt-get update && apt-get install -y \ build-essential \ pkg-config \ libssl-dev \ protobuf-compiler \ libpq-dev \ ca-certificates \ git \ curl \ && rm -rf /var/lib/apt/lists/* # Set working directory WORKDIR /build # Enable git fetch via CLI for cargo ENV CARGO_NET_GIT_FETCH_WITH_CLI=true # Copy workspace manifests COPY Cargo.toml Cargo.lock ./ # Copy workspace members COPY trading_engine ./trading_engine COPY risk ./risk COPY risk-data ./risk-data COPY trading-data ./trading-data COPY tli ./tli COPY ml ./ml COPY ml-data ./ml-data COPY data ./data COPY backtesting ./backtesting COPY adaptive-strategy ./adaptive-strategy COPY common ./common COPY storage ./storage COPY model_loader ./model_loader COPY market-data ./market-data COPY database ./database COPY config ./config COPY services/backtesting_service ./services/backtesting_service COPY services/trading_service ./services/trading_service COPY services/ml_training_service ./services/ml_training_service COPY services/api_gateway ./services/api_gateway COPY services/load_tests ./services/load_tests COPY services/stress_tests ./services/stress_tests COPY services/integration_tests ./services/integration_tests COPY tests ./tests COPY migrations ./migrations # Build without CUDA features RUN cargo build --release \ --package ml_training_service \ --no-default-features # ============================================================================= # Runtime Stage # ============================================================================= FROM debian:bookworm-slim # Install runtime dependencies RUN apt-get update && apt-get install -y \ ca-certificates \ libssl3 \ libpq5 \ curl \ && rm -rf /var/lib/apt/lists/* # Download and install grpc_health_probe RUN curl -sSL https://github.com/grpc-ecosystem/grpc-health-probe/releases/download/v0.4.25/grpc_health_probe-linux-amd64 \ -o /usr/local/bin/grpc_health_probe && \ chmod +x /usr/local/bin/grpc_health_probe # Create non-root user RUN groupadd --system --gid 1000 foxhunt && \ useradd --system --uid 1000 --gid foxhunt --shell /bin/bash foxhunt # Create application directories RUN mkdir -p /app/config /app/logs /app/models /app/checkpoints && \ chown -R foxhunt:foxhunt /app # Set working directory WORKDIR /app # Copy binary from builder COPY --from=builder /build/target/release/ml_training_service ./ml_training_service RUN chmod +x ./ml_training_service # Switch to non-root user USER foxhunt # Expose gRPC and metrics ports EXPOSE 50053 9094 # Health check using grpc_health_probe HEALTHCHECK --interval=10s --timeout=5s --start-period=30s --retries=3 \ CMD /usr/local/bin/grpc_health_probe -addr=localhost:50053 || exit 1 # Run the application ENTRYPOINT ["./ml_training_service"] CMD ["serve"]