Похоже, вы не одиноки в своем стремлении кешировать зависимости от ржавчины через процесс сборки докера. Вот отличная статья, которая поможет вам в этом: https://blog.mgattozzi.dev/caching-rust-docker-builds/
Суть в том, что вам сначала нужно dummy.rs и ваш Cargo.toml, затем создайте его для кеширования зависимостей и затем скопируйтеисточник приложения позже, чтобы не аннулировать кеш при каждой сборке.
Dockerfile
FROM rust
WORKDIR /var/www/app
COPY dummy.rs .
COPY Cargo.toml .
RUN sed -i 's#src/main.rs#dummy.rs#' Cargo.toml
RUN cargo build --release
RUN sed -i 's#dummy.rs#src/main.rs#' Cargo.toml
COPY . .
RUN cargo build --release
CMD ["target/release/app"]
Имя приложения CMD "app" основано на том, что вы указали в Cargo.toml для своего двоичного файла.
dummy.rs
fn main() {}
Cargo.toml
[package]
name = "app"
version = "0.1.0"
authors = ["..."]
[[bin]]
name = "app"
path = "src/main.rs"
[dependencies]
actix-web = "1.0.0"
src / main.rs
extern crate actix_web;
use actix_web::{web, App, HttpServer, Responder};
fn index() -> impl Responder {
"Hello world"
}
fn main() -> std::io::Result<()> {
HttpServer::new(|| App::new().service(web::resource("/").to(index)))
.bind("0.0.0.0:8080")?
.run()
}