Как я могу использовать команду --config в докере для ржавчины

Я запускаю разработку, используя файл --config в своем Rust API, это примерно так 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"
...

Я могу создать такой образ в своем докере, чтобы скопировать файл.

# 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, я получаю ошибку: env был пуст и не установлен

[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 ? вместо этого установите ручную среду

Я читал случаи в Интернете, но моей темы там нет, потому что ржавчина новая,

[env] от использования файла конфигурации груза влияет только на cargo вызовы с ним (т. е. cargo build, cargo run и т. д.). Если вы не хотите использовать груз в своем CMD (и я бы не советовал этого делать), я бы предложил Как передать переменные среды в контейнеры Docker?

kmdreko 27.06.2024 17:06

@kmdreko твой комментарий должен быть ответом

Codebling 27.06.2024 18:20
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Kubernetes - это портативная, расширяемая платформа с открытым исходным кодом для управления контейнерными рабочими нагрузками и сервисами, которая...
Как создать PHP Image с нуля
Как создать PHP Image с нуля
Сегодня мы создадим PHP Image from Scratch для того, чтобы легко развернуть базовые PHP-приложения. Пожалуйста, имейте в виду, что это разработка для...
0
2
55
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Здесь существует более одного возможного ответа. Давайте посмотрим несколько вариантов.

Опция 1

У вас может быть несколько файлов Docker (например: dockerfile/dockerfile.local), которые копируют в образ определенные файлы конфигурации. Внутри dockerfile.local у вас должно быть:

COPY dev-config.toml config.toml

Вариант 2 Вы можете закодировать, как показано в этом посте на Reddit, конфигурацию env, которая будет загружаться динамически на основе определенных правил.

Твоя проблема Поскольку я не вижу всей структуры вашего проекта, я бы посоветовал вам запустить локально RUN Cargo build --release и посмотреть, работает ли он. Если это работает, откройте образ докера (вот так) и проверьте, имеют ли скопированные файлы ту же структуру, что и ваш локальный проект.

Ответ принят как подходящий

[env] от использования файла груза --config влияет только на вызовы груза с ним (т. е. cargo build, cargo run и т. д.). Итак, вы можете сделать эту работу как есть, используя:

CMD = ["cargo", "run", "--release", "--config", "dev-config.toml"]

Хотя на самом деле я не рекомендую этого делать, даже если cargo build был запущен заранее.

Вместо этого я бы предложил прочитать Как передать переменные среды в контейнеры Docker? Такие варианты, как использование --env-file или запуск с конфигурацией docker-compose, вероятно, будут более приемлемыми. Если вы используете файл .env, вы можете изменить свой код Rust для загрузки из него, используя крейт dotenvy вместо предоставленного в конфигурации груза.

Другие вопросы по теме