FROM rust:1.75-slim-bullseye as builder WORKDIR /app # Install build dependencies RUN apt-get update && apt-get install -y \ pkg-config \ libssl-dev \ && rm -rf /var/lib/apt/lists/* # Copy manifests COPY Cargo.toml Cargo.lock* ./ # Create dummy source for dependency caching RUN mkdir src && \ echo "fn main() {}" > src/main.rs && \ echo "pub fn dummy() {}" > src/lib.rs # Build dependencies RUN cargo build --release && \ rm -rf src # Copy actual source COPY src ./src # Build the actual application RUN touch src/main.rs src/lib.rs && \ cargo build --release # Runtime stage FROM debian:bullseye-slim RUN apt-get update && apt-get install -y \ ca-certificates \ && rm -rf /var/lib/apt/lists/* WORKDIR /app # Copy the binary COPY --from=builder /app/target/release/memory-server /app/memory-server # Create non-root user RUN useradd -r -s /bin/false memoryservice USER memoryservice # Expose ports EXPOSE 9091 # Health check HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \ CMD echo "ping" | nc -z localhost 9091 || exit 1 # Environment defaults ENV RUST_LOG=info ENV MEMORY_BIND_ADDR=0.0.0.0:9091 CMD ["/app/memory-server"]