mirror of
https://github.com/dockersrc/rust
synced 2026-06-24 20:01:06 -04:00
✨ Build rust image with full toolchain, workflow, and utilities ✨
Install latest stable Rust at build time via rustup-init with SHA256 verification. Add 30 cross-compile targets, cargo-binstall, and a comprehensive set of cargo development tools. Match the official rust:alpine env-var convention (RUSTUP_HOME / CARGO_HOME) and declare those paths as Docker VOLUMEs. Add the Go-image pattern: rust-workflow runs automatically when the container is invoked with no args, while explicit commands pass through unchanged. Copy language-agnostic healthcheck, copy, and symlink utilities from the Go image. - Dockerfile: WORKDIR /app in final stage; add RUSTUP_HOME, CARGO_HOME, RUSTUP_TOOLCHAIN ENV vars; extend VOLUME to include cargo and rustup paths - rootfs/root/docker/setup/05-custom.sh: full Rust toolchain install — build deps (build-base musl-dev clang lld cmake openssl-dev), SHA256- verified rustup-init, stable toolchain with rust-src/rust-analyzer/ llvm-tools-preview, 30 cross-compile targets, cargo-binstall bootstrap, cargo tool suite via binstall, cross-linker config.toml, /usr/local/bin symlinks, ~/.cargo and ~/.rustup home symlinks, /etc/profile.d/rust.sh - rootfs/usr/local/bin/rust-workflow: default workflow script — fmt --check → clippy -D warnings → test --all → build --release; honours CARGO_WORKDIR and CARGO_BUILD_TARGET env vars - rootfs/usr/local/bin/entrypoint.sh: __no_exit guarded by $# -eq 0 in START_SERVICES block; * catch-all now calls rust-workflow on no args - rootfs/usr/local/bin/healthcheck: copied from Go image (HTTP/TCP/ process/file health probe) - rootfs/usr/local/bin/copy: copied from Go image (recursive copy utility) - rootfs/usr/local/bin/symlink: copied from Go image (symlink utility) Dockerfile rootfs/root/docker/setup/05-custom.sh rootfs/usr/local/bin/copy rootfs/usr/local/bin/entrypoint.sh rootfs/usr/local/bin/healthcheck rootfs/usr/local/bin/rust-workflow rootfs/usr/local/bin/symlink
This commit is contained in:
@@ -506,9 +506,11 @@ if [ "$START_SERVICES" = "yes" ] || [ -z "$1" ]; then
|
||||
echo "$$" >"$ENTRYPOINT_PID_FILE"
|
||||
__start_init_scripts "/usr/local/etc/docker/init.d"
|
||||
CONTAINER_INIT="${CONTAINER_INIT:-no}"
|
||||
# Services started successfully - enter monitoring mode
|
||||
__no_exit
|
||||
exit $?
|
||||
# Only block in monitoring mode when no user command was given
|
||||
if [ $# -eq 0 ]; then
|
||||
__no_exit
|
||||
exit $?
|
||||
fi
|
||||
fi
|
||||
START_SERVICES="no"
|
||||
fi
|
||||
@@ -674,11 +676,8 @@ start)
|
||||
# Execute primary command
|
||||
*)
|
||||
if [ $# -eq 0 ]; then
|
||||
if [ ! -f "$ENTRYPOINT_PID_FILE" ]; then
|
||||
echo "$$" >"$ENTRYPOINT_PID_FILE"
|
||||
[ "$START_SERVICES" = "no" ] && [ "$CONTAINER_INIT" = "yes" ] || __start_init_scripts "/usr/local/etc/docker/init.d"
|
||||
fi
|
||||
__no_exit
|
||||
# No args: run the default Rust workflow (fmt → clippy → test → build)
|
||||
__exec_command rust-workflow
|
||||
else
|
||||
__exec_command "$@"
|
||||
fi
|
||||
|
||||
Reference in New Issue
Block a user