Tenho um aplicativo Rust Axum que lê a URL do banco de dados logo no início para criar uma conexão com o banco de dados:
async fn main() {
let db_connection_str = std::env::var("DATABASE_URL").expect("DATABASE_URL must be set.");
println!("Connecting to database: {}", db_connection_str);
let pool = PgPoolOptions::new()
.max_connections(5)
.acquire_timeout(Duration::from_secs(3))
.connect(&db_connection_str)
.await
.expect("can't connect to database");
O problema é que não está obtendo a variável de ambiente. db_connection_str
está vazio, e recebo isso println
no console "Conectando ao banco de dados: " sem o valor real.
este é o dockerfile
FROM rust:1.84 AS development
WORKDIR /backend
COPY . .
ARG DATABASE_URL
ENV DATABASE_URL=$DATABASE_URL
RUN cargo run
E aqui está o arquivo docker-compose
backend:
build: ./backend
ports:
- "5173:5173"
environment:
DATABASE_URL: $DATABASE_URL
Tenho um .env
arquivo para variáveis de ambiente.
Nota: Quando executo este comando
docker build -t backend --build-arg DATABASE_URL=<Database_url> .
funciona, obtém a variável de ambiente, mas quando executo docker-compose up
não, e o problema mencionado acima acontece.