我在 Rust API 上使用
--config
文件运行开发,是这样的
cargo run --config dev-config.toml
其中 dev-config.toml 就像我的环境
像这样
[env]
APP_ENV = "development"
APP_PORT = "8181"
APP_TIMEOUT = "3" # in seconds
APP_MAX_ATTEMPTS = "50" # in attempts ( 50 request in 60 seconds )
MONGO_URI="balblaaa"
...
我可以像这样在我的docker中构建图像来复制文件
# Use the official Rust image as the base image
FROM rust:latest as builder
# Set the current working directory inside the Docker image
WORKDIR /usr/src
# Copy the Cargo.toml file and your source code into the Docker image
COPY Cargo.toml .
COPY src ./src
COPY secrets ./secrets
# Copy the dev-config.toml file
COPY dev-config.toml .
# Build the application in release mode
RUN cargo build --release --config dev-config.toml
# Start a new build stage
FROM rust:latest
# Copy the binary from the builder stage to the current stage
COPY --from=builder /usr/src/target/release/my-api /usr/local/bin
# Set the command to run your application
CMD ["my-api"]
当我运行时
docker run -p 8080:8080 my-api
我收到错误,环境为空且未设置
[INFO] - "Trying to Connect MongoDB..."
thread 'main' panicked at src/db.rs:43:75:
MONGO_URI must be set.: NotPresent
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
这是我想念的东西以及其他使用方式
--config
吗?相反设置手动环境
我在互联网上读过案例,但那里没有我的主题,因为 Rust 是新事物,
这里有不止一个可能的答案。让我们看看几个选项。
选项1
您可以有多个 docker 文件(例如: dockerfile / dockerfile.local )将特定配置文件复制到映像。在 dockerfile.local 中你应该有:
COPY dev-config.toml config.toml
选项2 您可以编写代码,如在这篇 reddit 帖子中所示,根据特定规则动态加载 env 配置。
你的问题 由于我看不到您的整个项目结构,我建议您在本地运行 RUN Cargo build --release 并查看它是否有效。如果有效,则打开您的 docker 映像(这样)并检查复制的文件是否与本地项目的结构相同。