Rust Docker 自定义依赖项

问题描述 投票:0回答:1

我正在使用

cargo-wharf
来构建我的 Rust 项目。

Cargo.toml:

# syntax = denzp/cargo-wharf-frontend:v0.1.0-alpha.2
[package]
name = "project_name"
version = "0.1.0"
edition = "2018"

[dependencies]
dep1 = {path = "../dep1", version = "0.2.0"}
...


[package.metadata.wharf.builder]
image = "clux/muslrust:nightly-2019-09-28"
target = "x86_64-unknown-linux-musl"

[package.metadata.wharf.output]
image = "scratch"
user = "root"

entrypoint = ["/usr/local/bin/project_name"]

[[package.metadata.wharf.binary]]
name = "project_name"
destination = "/usr/local/bin/project_name"

当我跑步

docker build -f Cargo.toml . -t project_name
时, 出现此错误:

[+] Building 5.2s (11/11) FINISHED
 => [internal] load build definition from Cargo.toml                                                                                                                                      0.0s 
 => => transferring dockerfile: 1.38kB                                                                                                                                                    0.0s 
 => [internal] load .dockerignore                                                                                                                                                         0.0s 
 => => transferring context: 2B                                                                                                                                                           0.0s 
 => resolve image config for docker.io/denzp/cargo-wharf-frontend:v0.1.0-alpha.2                                                                                                          3.3s 
 => CACHED docker-image://docker.io/denzp/cargo-wharf-frontend:v0.1.0-alpha.2@sha256:a57861317aa7ae8010927d6e000c9be523d3b78c2b42f3e5c281c8cc3328b1a0                                     0.0s 
 => Using build context                                                                                                                                                                   0.0s 
 => => transferring dockerfile: 6.41kB                                                                                                                                                    0.0s 
 => CACHED docker-image://docker.io/denzp/cargo-container-tools:v0.2.0-alpha.1                                                                                                            0.0s 
 => => resolve docker.io/denzp/cargo-container-tools:v0.2.0-alpha.1                                                                                                                       0.7s 
 => CACHED Collecting configuration metadata                                                                                                                                              0.0s 
 => Resolving builder image                                                                                                                                                               0.5s 
 => Using build context                                                                                                                                                                   0.0s 
 => => transferring context: 6.41kB                                                                                                                                                       0.0s 
 => CACHED docker-image://docker.io/clux/muslrust:nightly-2019-09-28@sha256:05cd14b73ae42a978d67a12e099eac8f6fe61daf2a963b7f401817a246ba4948                                              0.0s 
 => ERROR Evaluating the build plan                                                                                                                                                       0.3s 
------
 > Evaluating the build plan:
#11 0.259 error: failed to load source for a dependency on `dep1`
#11 0.259
#11 0.259 Caused by:
#11 0.259   Unable to update /dep1
#11 0.259
#11 0.259 Caused by:
#11 0.259   failed to read `/dep1/Cargo.toml`
#11 0.259
#11 0.259 Caused by:
#11 0.259   No such file or directory (os error 2)
#11 0.259 error: Child process failed
------
failed to solve with frontend dockerfile.v0: failed to solve with frontend gateway.v0: rpc error: code = Unknown desc = Unable to evaluate the Cargo build plan => caused by: Unable to read Cargo build plan => caused by: Unable to read the file => caused by: grpc-status: Unknown, grpc-message: "executor failed running [/usr/local/bin/cargo-build-plan --manifest-path /context/Cargo.toml --output /output/build-plan.json --target x86_64-unknown-linux-musl --release]: exit code: 1"

dep1
是一个自定义包,与
project_name
同级。

原来如此

C:\Users\me\shared_folder\project_name\Cargo.toml
C:\Users\me\shared_folder\dep1\Cargo.toml

cargo run
运行
C:\Users\me\shared_folder\project_name\Cargo.toml
时,一切正常。

我已经尝试过:

  • 更改版本=“2018”,正如我在某处读到的那样,没有影响
  • 删除了 Cargo.lock 和目标文件夹,对我来说也不起作用

有谁知道如何让我的程序+自定义依赖项在docker中运行?

docker rust rust-cargo
1个回答
0
投票

我有点困惑这是可能的,但解决你的问题很简单:

  • 您需要将整个
    shared_folder
    (包含
    lib1
    project_name
    )作为构建上下文,即您的构建上下文必须是
    ..
    而不是
    .
    。否则,dockerized 构建器无法访问
    lib1
  • 您需要指定在哪里找到您的
    Cargo.toml
    ,因为它不再位于构建器的工作目录中。您可以通过将工作区
    Cargo.toml
    添加到
    shared_folder
    来做到这一点,但我认为使用
    --build-arg manifest-path=…
    更容易。

总结:

buildx build -f Cargo.toml --build-arg manifest-path=project_name/Cargo.toml ..
© www.soinside.com 2019 - 2024. All rights reserved.