FROM rust:1.75-alpine as builder # update packages RUN apk update RUN apk add build-base ca-certificates libressl-dev # Install rust toolchains RUN rustup toolchain install stable RUN rustup default stable # create root application folder WORKDIR /app COPY ./ /app/src WORKDIR /app/src # Build dependencies only. Separate these for caches RUN cargo install cargo-build-deps RUN sh -c "cargo build-deps --release" # Build the release executable. RUN sh -c "cargo build --release" # Runner stage. I tried using distroless (gcr.io/distroless/static-debian11), but the image was only ~3MBs smaller than # alpine. I chose to use alpine since it makes it easier to exec into the container to debug things. FROM rust:1.75-alpine ARG UNAME=exporter ARG UID=1000 ARG GID=1000 # Add user and copy the executable from the build stage. RUN adduser --disabled-password --gecos "" $UNAME -s -G $GID -u $UID COPY --from=builder --chown=$UID:$GID /app/src/target/release/tautulli-exporter /app/tautulli-exporter # Chown everything RUN mkdir /data && \ chown -R $UID:$GID /data && \ chown -R $UID:$GID /app USER $UNAME WORKDIR /app/ EXPOSE 3000 ENTRYPOINT [ "/app/tautulli-exporter", "--config", "/app/config.toml" ]