如何构建包含本地依赖项的Rust项目的Docker映像?

我的Cargo.toml看起来是这样的:

[package]
name = "backend"
version = "0.1.0"
edition = "2021"


[dependencies]
actix-web = "4"
juniper = "0.15.10"
my_libs = {path = "/Users/dev/projects/api/api_libs/"}

而我的Dockerfile:

FROM rust:1.60.0-slim-buster as builder
WORKDIR /app
ENV CARGO_HOME=/workdir/.cargo
COPY ./Cargo.toml ./Cargo.lock ./

COPY . .

RUN cargo build --release

当我运行docker Build时,我得到以下错误:

错误:无法将my_libs作为包backend v0.1.0 (/app)的依赖项获取

我怎么才能解决这个问题呢?

推荐答案

您给出的路径将被docker解释为容器内的路径,因此它不存在是正常的.

您也不能复制Dockerfile目录中不存在的文件.

要么在crates.io上发布您的lib,要么通过可以随Cargo一起安装的Git URL(即:GitHub)提供它.

或者将库复制到本地,以便可以将其复制到容器中.

Rust相关问答推荐

计算具有相邻调换且没有插入或删除的序列的距离

为什么是!为Rust中的RwLockReadGuard和RwLockWriteGuard实现的发送特征?

带参考文献的 rust 元组解构

如何正确重新排列代码以绕过铁 rust 借入判断器?

如何使用Actix Web for Rust高效地为大文件服务

如何在AVX2中对齐/旋转256位向量?

如何设置activx websocket actorless的消息大小限制?

这是什么:`impl Trait for T {}`?

为什么 Rust 需要可变引用的显式生命周期而不是常规引用?

结果流到 Vec 的结果:如何避免多个into_iter和collect?

为什么 Rust 字符串没有短字符串优化 (SSO)?

如何在 Rust 的 Hyper 异步闭包中从外部范围正确读取字符串值

Some(v) 和 Some(&v) 有什么区别?

在 Rust 中使用 `SecTrustSettingsSetTrustSettings` 绑定导致 `errSecInternalComponent`

Rust/Serde/HTTP:序列化`Option`

SDL2 没有在终端键上触发?

为什么会出现无法移出可变引用后面的 `self.x`错误?

为什么指定生命周期让我返回一个引用?

在 FFI 的上下文中,未初始化是什么意思?

需要括号的宏调用中的不必要的括号警告 - 这是编写宏的糟糕方法吗?