一般来说,Rust 的 Docker 镜像可以选择 rust:latest

但是这并没有提供 rust-nightly 的环境,解决办法有两个:

  1. 在构建前,使用 RUN 执行下面的操作:

    RUN rustup update nightly; rustup default nightly;
    

    因为

    The Rust installs in the images are managed by rustup

    但这样可能会带来一些潜在的问题,详见 rust-lang/docker-rust/issue#5

  2. 或者使用官方提供的另一个镜像 rustlang/rust:nightly

    docker pull rustlang/rust:nightly
    
    FROM rustlang/rust:nightly
    
    # 其他内容...
    

具体的例子

下面是一个大学生体质健康得分的计算器(虽然前端用 Js 就能完成):

FROM rustlang/rust:nightly-alpine AS builder

WORKDIR /workspace

COPY . .

# 我们需要完全的静态编译,不能依赖 glibc
RUN apk add --no-cache -U musl-dev
RUN cargo build -Z unstable-options \
    --release \
    --target x86_64-unknown-linux-musl \
    --out-dir /build
COPY ./config.yaml /build

FROM alpine

WORKDIR /app
COPY --from=builder /build .

ENV RUST_LOG=info

CMD ["./college-student-pe-score"]