我正在使用
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
时,一切正常。
我已经尝试过:
有谁知道如何让我的程序+自定义依赖项在docker中运行?
我有点困惑这是可能的,但解决你的问题很简单:
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 ..