You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Rust官方Docker镜像中运行自定义入口文件

如何用Rust官方Docker镜像指定非main.rs的入口文件

你已经正确配置了Cargo.toml,通过[[bin]]字段声明了两个二进制目标main1和main2,对应src/main1.rs和src/main2.rs。接下来只需要在两个Dockerfile中分别指定构建和运行的目标二进制即可。

Dockerfile1(运行main1.rs)

# 基于官方Rust镜像创建构建环境
FROM rust:latest

# 设置工作目录
WORKDIR /app

# 先复制Cargo配置文件,缓存依赖构建(避免每次改源码都重新编译依赖)
COPY Cargo.toml Cargo.lock ./
# 创建临时src目录和空main.rs,让Cargo能先解析依赖
RUN mkdir src/ && echo "fn main() {}" > src/main.rs
RUN cargo build --release
# 删除临时src目录
RUN rm -rf src/

# 复制实际源码文件
COPY src/ ./src/

# 构建指定的二进制目标main1
RUN cargo build --release --bin main1

# 指定容器启动时运行的二进制文件
CMD ["./target/release/main1"]

Dockerfile2(运行main2.rs)

只需要把构建和运行的目标改成main2即可:

FROM rust:latest

WORKDIR /app

COPY Cargo.toml Cargo.lock ./
RUN mkdir src/ && echo "fn main() {}" > src/main.rs
RUN cargo build --release
RUN rm -rf src/

COPY src/ ./src/

# 构建目标改为main2
RUN cargo build --release --bin main2

# 运行的二进制改为main2
CMD ["./target/release/main2"]

优化建议:多阶段构建减小镜像体积

官方Rust镜像体积较大,推荐用多阶段构建,把构建好的二进制文件复制到轻量镜像中运行:

Dockerfile1的多阶段版本

# 第一阶段:构建二进制文件
FROM rust:latest AS builder

WORKDIR /app

COPY Cargo.toml Cargo.lock ./
RUN mkdir src/ && echo "fn main() {}" > src/main.rs
RUN cargo build --release
RUN rm -rf src/

COPY src/ ./src/
RUN cargo build --release --bin main1

# 第二阶段:用轻量镜像运行
FROM debian:bookworm-slim

# 从构建阶段复制编译好的二进制文件
COPY --from=builder /app/target/release/main1 /usr/local/bin/

# 直接运行二进制(因为已经放到系统路径里了)
CMD ["main1"]

同理,Dockerfile2的多阶段版本只需要把main1替换成main2即可。

核心逻辑是:通过cargo build --bin <name>指定要构建的二进制目标(对应Cargo.toml里[[bin]]的name字段),然后在CMD中运行对应的编译产物。

内容的提问来源于stack exchange,提问作者hikaru

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 02:32:12