🚀 Help me to become a full-time open-source developer by sponsoring me on GitHub
Docker images for compiling static Rust binaries using musl-cross-make, inspired by rust-musl-builder
Currently we have the following prebuilt Docker images on Docker Hub, supports x86_64(amd64) and aarch64(arm64) architectures.
| Rust toolchain | Cross Compile Target | Docker Image Tag |
|---|---|---|
| stable | aarch64-unknown-linux-musl | aarch64-musl |
| stable | arm-unknown-linux-musleabi | arm-musleabi |
| stable | arm-unknown-linux-musleabihf | arm-musleabihf |
| stable | armv5te-unknown-linux-musleabi | armv5te-musleabi |
| stable | armv7-unknown-linux-musleabi | armv7-musleabi |
| stable | armv7-unknown-linux-musleabihf | armv7-musleabihf |
| stable | i586-unknown-linux-musl | i586-musl |
| stable | i686-unknown-linux-musl | i686-musl |
| stable | mips-unknown-linux-musl | mips-musl |
| stable | mipsel-unknown-linux-musl | mipsel-musl |
| stable | mips64-unknown-linux-muslabi64 | mips64-muslabi64 |
| stable | mips64el-unknown-linux-muslabi64 | mips64el-muslabi64 |
| stable | powerpc64le-unknown-linux-musl | powerpc64le-musl |
| stable | riscv64gc-unknown-linux-musl | riscv64gc-musl |
| stable | x86_64-unknown-linux-musl | x86_64-musl |
To use armv7-unknown-linux-musleabihf target for example, first pull the image:
docker pull ghcr.io/rust-cross/rust-musl-cross:armv7-musleabihf
# Also available on Docker Hub
# docker pull messense/rust-musl-cross:armv7-musleabihfThen you can do:
alias rust-musl-builder='docker run --rm -it -v "$(pwd)":/home/rust/src ghcr.io/rust-cross/rust-musl-cross:armv7-musleabihf'
rust-musl-builder cargo build --releaseThis command assumes that $(pwd) is readable and writable. It will output binaries in armv7-unknown-linux-musleabihf.
At the moment, it doesn't attempt to cache libraries between builds, so this is best reserved for making final release builds.
rust-musl-cross uses musl-libc, musl-gcc with the help of musl-cross-make to make it easy to compile, and the new
rustup target support.
Currently we install stable Rust by default, if you want to switch to beta/nightly Rust, you can do it by extending
from our Docker image, for example to use beta Rust for target x86_64-unknown-linux-musl:
FROM ghcr.io/rust-cross/rust-musl-cross:x86_64-musl
RUN rustup update beta && \
rustup target add --toolchain beta x86_64-unknown-linux-muslYou can use the musl-strip command inside the image to strip binaries, for example:
docker run --rm -it -v "$(pwd)":/home/rust/src ghcr.io/rust-cross/rust-musl-cross:armv7-musleabihf musl-strip /home/rust/src/target/release/exampleLicensed under The MIT License