一般来说,Rust 的 Docker 镜像可以选择 rust:latest
但是这并没有提供 rust-nightly 的环境,解决办法有两个:
-
在构建前,使用
RUN
执行下面的操作:RUN rustup update nightly; rustup default nightly;
因为
The Rust installs in the images are managed by rustup
但这样可能会带来一些潜在的问题,详见 rust-lang/docker-rust/issue#5
-
或者使用官方提供的另一个镜像
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"]