Support multi-arch Docker builds

This commit is contained in:
Codex
2026-06-12 14:24:21 +00:00
parent f9315a5d4e
commit c1f568be1d

View File

@@ -1,16 +1,40 @@
FROM rust:1-bookworm AS builder FROM --platform=$BUILDPLATFORM rust:1-bookworm AS builder
WORKDIR /src WORKDIR /src
RUN apt-get update \ RUN apt-get update \
&& apt-get install --no-install-recommends -y build-essential ca-certificates \ && apt-get install --no-install-recommends -y \
build-essential ca-certificates \
gcc-aarch64-linux-gnu gcc-x86-64-linux-gnu \
libc6-dev-arm64-cross libc6-dev-amd64-cross \
linux-libc-dev-arm64-cross linux-libc-dev-amd64-cross \
&& rm -rf /var/lib/apt/lists/* && rm -rf /var/lib/apt/lists/*
ARG TARGETARCH
COPY Cargo.toml Cargo.lock ./ COPY Cargo.toml Cargo.lock ./
COPY migrations ./migrations COPY migrations ./migrations
COPY src ./src COPY src ./src
COPY tests ./tests COPY tests ./tests
RUN cargo build --release --locked RUN case "$TARGETARCH" in \
amd64) \
rust_target=x86_64-unknown-linux-gnu; \
linker=x86_64-linux-gnu-gcc; \
;; \
arm64) \
rust_target=aarch64-unknown-linux-gnu; \
linker=aarch64-linux-gnu-gcc; \
;; \
*) \
echo "unsupported TARGETARCH=$TARGETARCH" >&2; \
exit 1; \
;; \
esac \
&& rustup target add "$rust_target" \
&& env "CARGO_TARGET_$(printf '%s' "$rust_target" | tr '[:lower:]-' '[:upper:]_')_LINKER=$linker" \
CC="$linker" \
cargo build --release --locked --target "$rust_target" \
&& mkdir -p /out \
&& cp "target/$rust_target/release/kosync-rs" /out/kosync-rs
FROM debian:bookworm-slim FROM debian:bookworm-slim
@@ -19,7 +43,7 @@ RUN apt-get update \
&& rm -rf /var/lib/apt/lists/* \ && rm -rf /var/lib/apt/lists/* \
&& useradd --system --uid 10001 --home-dir /data --create-home kosync && useradd --system --uid 10001 --home-dir /data --create-home kosync
COPY --from=builder /src/target/release/kosync-rs /usr/local/bin/kosync-rs COPY --from=builder /out/kosync-rs /usr/local/bin/kosync-rs
USER kosync USER kosync
WORKDIR /data WORKDIR /data