Home

Awesome

rust-musl-cross

Docker Image Build Bors enabled

🚀 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

Prebuilt images

Currently we have the following prebuilt Docker images on Docker Hub, supports x86_64(amd64) and aarch64(arm64) architectures.

Rust toolchainCross Compile TargetDocker Image Tag
stableaarch64-unknown-linux-muslaarch64-musl
stablearm-unknown-linux-musleabiarm-musleabi
stablearm-unknown-linux-musleabihfarm-musleabihf
stablearmv5te-unknown-linux-musleabiarmv5te-musleabi
stablearmv7-unknown-linux-musleabiarmv7-musleabi
stablearmv7-unknown-linux-musleabihfarmv7-musleabihf
stablei586-unknown-linux-musli586-musl
stablei686-unknown-linux-musli686-musl
nightlymips-unknown-linux-muslmips-musl
nightlymipsel-unknown-linux-muslmipsel-musl
nightlymips64-unknown-linux-muslabi64mips64-muslabi64
nightlymips64el-unknown-linux-muslabi64mips64el-muslabi64
nightlypowerpc64le-unknown-linux-muslpowerpc64le-musl
stablex86_64-unknown-linux-muslx86_64-musl

To use armv7-unknown-linux-musleabihf target for example, first pull the image:

docker pull messense/rust-musl-cross:armv7-musleabihf
# Also available on ghcr.io
# docker pull ghcr.io/rust-cross/rust-musl-cross:armv7-musleabihf

Then you can do:

alias rust-musl-builder='docker run --rm -it -v "$(pwd)":/home/rust/src messense/rust-musl-cross:armv7-musleabihf'
rust-musl-builder cargo build --release

This 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.

How it works

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.

Use beta/nightly Rust

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 messense/rust-musl-cross:x86_64-musl
RUN rustup update beta && \
    rustup target add --toolchain beta x86_64-unknown-linux-musl

Strip binaries

You can use the musl-strip command inside the image to strip binaries, for example:

docker run --rm -it -v "$(pwd)":/home/rust/src messense/rust-musl-cross:armv7-musleabihf musl-strip /home/rust/src/target/release/example

License

Licensed under The MIT License