0

我已经创建了 rust 应用程序,我想 dockerize 我的应用程序。下面是我的 Dockerfile 代码,它来自参考。我在创建图像时遇到问题,出现如下错误。在我的本地 my-app 项目文件夹中,我有 cargo.toml ,其中不包含任何内容,package name仅包含work-space以下内容作为参考。请帮助解决这个问题。

错误:读取失败/home/rust/src/my-app/config/Cargo.toml

FROM ekidd/rust-musl-builder:stable as builder

RUN USER=root cargo new --bin my-app
WORKDIR ./my-app
COPY ./Cargo.lock ./Cargo.lock
COPY ./Cargo.toml ./Cargo.toml
RUN cargo build --release
RUN rm src/*.rs

ADD . ./

RUN rm ./target/x86_64-unknown-linux-musl/release/deps/my-app*
RUN cargo build --release


FROM alpine:latest

ARG APP=/usr/src/app

EXPOSE 8000

ENV TZ=Etc/UTC \
    APP_USER=appuser

RUN addgroup -S $APP_USER \
    && adduser -S -g $APP_USER $APP_USER

RUN apk update \
    && apk add --no-cache ca-certificates tzdata \
    && rm -rf /var/cache/apk/*

COPY --from=builder /home/rust/src/my-app/target/x86_64-unknown-linux-musl/release/rust-docker-web ${APP}/my-app

RUN chown -R $APP_USER:$APP_USER ${APP}

USER $APP_USER
WORKDIR ${APP}

CMD ["./my-app"]

cargo.toml
[workspace]

members = [
"abcd",
"efgh"
"ijkl"
]

在 config.toml 中添加包名后,我遇到了错误

原因:清单中没有指定目标,必须存在 src/lib.rs、src/main.rs、[lib] 部分或 [[bin]] 部分

4

1 回答 1

0

nameCargo 需要和version键来构建您的应用程序。添加这些应该可以解决问题:

[package]
name = "foo"
version = "0.1.0" 

[workspace]
members = [
"abcd",
"efgh"
"ijkl"
]

请注意,虽然edition不需要密钥,但如果未指定,cargo 将默认使用 Rust 2015 版而不是较新的 2018 版编译您的应用程序。您可能应该指定您的 Rust 版本(即使您使用的是 2015 版),以避免任何混淆:

[package]
edition = "2018"
于 2020-11-01T03:48:45.867 回答