containers/knut-flight/Containerfile
# knut-flight-server (N4) — the Apache Arrow Flight service over knut's rel2graph
# output, packaged for Kubernetes / rootless podman (the N5 k8s target).
#
# The knut workspace has members with path deps on SIBLING repos (../edda), so it
# does not build in isolation inside a container. Instead we copy the already-built,
# already-version-stamped release binary (build.rs stamps version+git-hash; verify
# with `--version`) into a slim runtime base. The binary needs glibc ≤ 2.39, so the
# trixie base (glibc 2.41) runs it directly.
#
# Build (context = a staging dir holding the release binary as `knut-flight-server`):
# cargo build --release -p knut-flight --bin knut-flight-server
# mkdir -p /tmp/knut-flight-ctx
# cp target/release/knut-flight-server /tmp/knut-flight-ctx/
# podman build -t knut-flight-server:0.1.3 \
# -f containers/knut-flight/Containerfile /tmp/knut-flight-ctx
#
# Run:
# podman run --rm -p 50055:50055 knut-flight-server:0.1.3
#
# Config is env-only (matches the systemd unit the Skidbladnir installer drops):
# KNUT_FLIGHT_ADDR bind address (default 0.0.0.0:50055)
# KNUT_FLIGHT_SCALE bench scale (default 1)
ARG DEBIAN_TAG=trixie-slim
FROM docker.io/library/debian:${DEBIAN_TAG} AS runtime
# Non-root service account (matches the systemd unit's dedicated `_knut` user).
RUN useradd --system --no-create-home --uid 10055 knut
COPY knut-flight-server /usr/local/bin/knut-flight-server
RUN chmod 0755 /usr/local/bin/knut-flight-server
USER knut
ENV KNUT_FLIGHT_ADDR=0.0.0.0:50055 \
KNUT_FLIGHT_SCALE=1
EXPOSE 50055
ENTRYPOINT ["/usr/local/bin/knut-flight-server"]