# ============================================================================= # DCTS Worker Node Dockerfile — Fortran (gfortran/BLAS/LAPACK) + Node Runner # ============================================================================= # ─── Stage 1: Rust Node Worker 二进制编译 ──────────────────────────────────── FROM rust:1.80-alpine AS node-builder RUN apk add --no-cache musl-dev g++ make pkgconfig sqlite-dev WORKDIR /app COPY Cargo.toml Cargo.lock ./ COPY crates/ ./crates/ COPY tools/ ./tools/ RUN cargo build --release -p node && \ cp /app/target/release/node /usr/local/bin/dcts-node # ─── Stage 2: Fortran 运行环境镜像 ─────────────────────────────────────────── FROM debian:bookworm-slim RUN apt-get update && apt-get install -y --no-install-recommends \ gfortran \ liblapack-dev \ libblas-dev \ ca-certificates \ curl \ procps \ && rm -rf /var/lib/apt/lists/* RUN groupadd -g 65532 dcts && useradd -u 65532 -g dcts -s /bin/bash dcts WORKDIR /app COPY --from=node-builder /usr/local/bin/dcts-node /app/ RUN mkdir -p /app/data/runtime /app/data/work /app/logs /app/assets && \ chown -R dcts:dcts /app USER dcts ENV DCTS_SERVER_URL=http://dcts-server:8090 ENV DCTS_MAX_SLOTS=4 ENV DCTS_HEARTBEAT_SEC=15 ENV DCTS_RUNTIME_DIR=/app/data/runtime ENV DCTS_WORK_DIR=/app/data/work ENV DCTS_ASSETS_DIR=/app/assets VOLUME ["/app/data/work", "/app/logs"] ENTRYPOINT ["/app/dcts-node"]