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

Docker构建Rust项目执行cargo build --release时提示找不到cmake

问题原因
  • 你本地Windows系统安装了cmake并配置了环境变量,所以本地执行cargo命令可以正常编译,但Docker镜像构建是在隔离的Linux容器环境中运行,你使用的rust:1.62基础镜像默认没有预装cmake、gcc、g++等编译工具。
  • prost-build v0.10.4版本在构建时会自动编译内置的protobuf源码,必须依赖cmake和C/C++编译链,容器内找不到cmake命令就会抛出你看到的错误。宿主机的环境变量、已安装软件不会自动同步到Docker构建容器内部。
修复方法

在构建阶段的基础镜像中先安装所需依赖,修改后的Dockerfile如下:

FROM rust:1.62 as build

# 安装prost编译所需的系统依赖
RUN apt update && apt install -y cmake build-essential

RUN USER=root cargo new --bin web_server
WORKDIR /web_server

COPY ./Cargo.lock ./Cargo.lock
COPY ./Cargo.toml ./Cargo.toml

COPY ./src ./src
COPY build.rs build.rs
COPY ./proto ./proto

RUN cargo build --release

FROM debian:buster-slim

COPY --from=build /web_server/target/release/web_server .

CMD ["./web_server"]
构建速度优化(可选)

可以利用Docker的层缓存机制,先拷贝依赖清单文件预编译依赖层,后续修改业务代码时不需要重复编译所有第三方依赖,优化后构建阶段配置如下:

FROM rust:1.62 as build

RUN apt update && apt install -y cmake build-essential

RUN USER=root cargo new --bin web_server
WORKDIR /web_server

COPY ./Cargo.lock ./Cargo.lock
COPY ./Cargo.toml ./Cargo.toml
# 构建空项目缓存依赖
RUN cargo build --release
RUN rm src/*.rs

COPY ./src ./src
COPY build.rs build.rs
COPY ./proto ./proto
# 仅重新编译业务代码
RUN touch src/main.rs && cargo build --release

FROM debian:buster-slim
COPY --from=build /web_server/target/release/web_server .
CMD ["./web_server"]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 05:54:15