🚀 欢迎通过https://github.com/***/messense%E6%94%AF%E6%8C%81%E6%88%91%E6%88%90%E4%B8%BA%E5%85%A8%E8%81%8C%E5%BC%80%E6%BA%90%E5%BC%80%E5%8F%91%E8%80%85
用于使用https://github.com/richfelker/musl-cross-make编译静态Rust二进制文件的Docker镜像,灵感来源于https://github.com/emk/rust-musl-builder
目前我们在https://hub.docker.com/r/messense/rust-musl-cross/%EF%BC%8C%E6%94%AF%E6%8C%81x86_64(amd64)%E5%92%8Caarch64(arm64)%E6%9E%B6%E6%9E%84%E3%80%82
| Rust工具链 | 交叉编译目标 | Docker镜像标签 |
|---|---|---|
| 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 | loongarch64-unknown-linux-musl | loongarch64-musl |
| nightly | mips-unknown-linux-musl | mips-musl |
| nightly | mips64-openwrt-linux-musl | mips64-openwrt-musl |
| nightly | mips64-unknown-linux-muslabi64 | mips64-muslabi64 |
| nightly | mips64el-unknown-linux-muslabi64 | mips64el-muslabi64 |
| nightly | mipsel-unknown-linux-musl | mipsel-musl |
| nightly | powerpc64-unknown-linux-musl | powerpc64-musl |
| stable | powerpc64le-unknown-linux-musl | powerpc64le-musl |
| stable | riscv64gc-unknown-linux-musl | riscv64gc-musl |
| nightly | s390x-unknown-linux-musl | s390x-musl |
| stable | x86_64-unknown-linux-musl | x86_64-musl |
例如,要使用armv7-unknown-linux-musleabihf目标,首先拉取镜像:
docker pull ghcr.io/rust-cross/rust-musl-cross:armv7-musleabihf
# 也可在Docker Hub获取
# docker pull messense/rust-musl-cross:armv7-musleabihf
然后可以执行:
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 --release
此命令假设$(pwd)是可读写的。它将在armv7-unknown-linux-musleabihf目录中输出二进制文件。目前,它不会尝试在构建之间缓存库,因此最适合用于制作最终发布版本。
部分镜像还以符合Docker约定的标签名称发布,这些标签与Docker的TARGETARCH构建参数(例如amd64、arm64)匹配。别名标签格式为<TARGETARCH>-musl:
| 主标签 | 别名标签 |
|---|---|
aarch64-musl | arm64-musl |
x86_64-musl | amd64-musl |
i686-musl | 386-musl |
loongarch64-musl | loong64-musl |
powerpc64-musl | ppc64-musl |
powerpc64le-musl | ppc64le-musl |
mips64-muslabi64 | mips64-musl |
mips64el-muslabi64 | mips64le-musl |
mipsel-musl | mipsle-musl |
riscv64gc-musl | riscv64-musl |
这使得多平台Dockerfile可以直接使用TARGETARCH,无需任何显式构建参数:
ARG TARGETARCH=amd64
FROM ghcr.io/rust-cross/rust-musl-cross:${TARGETARCH}-musl AS builder
Docker会根据原生运行平台自动设置TARGETARCH,因此相同的docker buildx build --platform linux/amd64,linux/arm64命令会在每个平台上选择正确的镜像,无需额外配置。
[!NOTE]
arm变体(arm-musleabi、arm-musleabihf、armv7-musleabi、armv7-musleabihf、armv5te-musleabi)没有别名,因为它们都映射到GOARCH=arm,导致单一规范的arm-musl别名存在歧义。
rust-musl-cross借助https://github.com/richfelker/musl-cross-make,使用musl-libc、musl-gcc简化编译过程,并支持新版rustup的target功能。
我们默认安装stable Rust,若需切换到beta/nightly Rust,可基于我们的Docker镜像扩展,例如为目标x86_64-unknown-linux-musl使用beta Rust:
FROM ghcr.io/rust-cross/rust-musl-cross:x86_64-musl
RUN rustup update beta && \
rustup target add --toolchain beta x86_64-unknown-linux-musl
可在镜像内使用musl-strip命令剥离二进制文件,例如:
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/example
基于MIT许可证授权
探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
通过 Docker 登录认证访问私有仓库
无需登录使用专属域名
Kubernetes 集群配置 Containerd
K3s 轻量级 Kubernetes 镜像加速
VS Code Dev Containers 配置
Podman 容器引擎配置
HPC 科学计算容器配置
ghcr、Quay、nvcr 等镜像仓库
Harbor Proxy Repository 对接专属域名
Portainer Registries 加速拉取
Nexus3 Docker Proxy 内网缓存
需要其他帮助?请查看我们的 常见问题Docker 镜像访问常见问题解答 或 提交工单
docker search 限制
站内搜不到镜像
离线 save/load
插件要用 plugin install
WSL 拉取慢
安全与 digest
新手拉取配置
镜像合规机制
不支持 push
manifest unknown
no matching manifest(架构)
invalid tar header(解压)
TLS 证书失败
DNS 超时
域名连通性排查
410 Gone 排查
402 与流量用尽
401 认证失败
429 限流
D-Bus 凭证提示
413 与超大单层
来自真实用户的反馈,见证轩辕镜像的优质服务