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");
问题是它没有获得环境变量。
db_connection_str
是空的,我在控制台“连接到数据库中:”没有实际值。
这是dockerfile
println
这是Docker-Compose文件
FROM rust:1.84 AS development
WORKDIR /backend
COPY . .
ARG DATABASE_URL
ENV DATABASE_URL=$DATABASE_URL
RUN cargo run
我有一个用于环境变量的文件。
注:我运行此命令
backend:
build: ./backend
ports:
- "5173:5173"
environment:
DATABASE_URL: $DATABASE_URL
它有效,它获取环境变量,但是当我运行时,它没有,并且上述问题发生了。
序列不正确。
构建容器时,您将设置被烘烤到容器图像中的环境变量。但是您的DockerFile中的ARG线允许在容器运行时指定环境变量。效果,您在Docker构建时间期间指定的值只是一个默认值。
现在,在Docker-Compose文件中,您不仅启动容器,还可以指定环境变量。但是它有什么价值?.env
可以解析用于码头组合吗?测试,我要么放置一个文字值以覆盖或完全删除该变量以允许容器使用它的默认值。