################################################################################ # App builder stage FROM rust:1.96.0-trixie@sha256:fb328f0f58becb23ba1719940a2c94ece8b0b48afa837d05b79ef64bc1e18f6e AS app-builder RUN apt update && \ apt install -y --no-install-recommends libclang-dev cmake protobuf-compiler COPY listener/ /opt/listener COPY server/proto /opt/server/proto WORKDIR /opt/listener RUN cargo build --release ################################################################################ # FFmpeg builder stage FROM debian:13-slim@sha256:b6e2a152f22a40ff69d92cb397223c906017e1391a73c952b588e51af8883bf8 AS ffmpeg-builder RUN apt-get update && \ apt-get install -y --no-install-recommends ffmpeg RUN mkdir -p /rootfs/bin && \ cp /usr/bin/ffmpeg /usr/bin/ffprobe /rootfs/bin/ && \ { ldd /usr/bin/ffmpeg; ldd /yt-dlp; } 2>/dev/null | \ grep -o '/[^ ]*' | sort -u | \ xargs -I '{}' cp --parents '{}' /rootfs && \ LIBDIR=$(dirname "$(find /rootfs -name 'libc.so.6' | head -1)") && \ for stub in libutil.so.1 libdl.so.2 libpthread.so.0 librt.so.1; do \ [ -f "${LIBDIR}/${stub}" ] || ln -sf libc.so.6 "${LIBDIR}/${stub}"; \ done ################################################################################ # Final squashed image FROM gcr.io/distroless/cc-debian13 AS final # Copy listener library COPY --from=ffmpeg-builder /rootfs/ / COPY --from=app-builder /opt/listener/target/release/scannerbot-listener /bin/ ENTRYPOINT ["/bin/scannerbot-listener"]