【无标题】PostgreSQL容器

为了在启动PostgreSQL容器后创建数据库并退出,你可以在运行PostgreSQL容器时通过命令行参数或者环境变量传递SQL命令给PostgreSQL初始化脚本。然而,直接在启动脚本中执行这一操作并不直观且可能不可靠,更好的方式是在FastAPI容器启动后,通过其内部逻辑连接数据库并创建所需的数据库。

但如果你坚持要在启动脚本中完成这一任务,可以尝试如下方法(这里假设你知道如何安全地在脚本中嵌入密码):

#!/bin/bash

# ... (previous configurations)

# Run the PostgreSQL container and create the database
PG_DATABASE="fast_web"
PG_INIT_SCRIPT="/path/to/pg_init.sql" # Contains 'CREATE DATABASE fast_web;'

docker run -d \
  --name $PG_CONTAINER_NAME \
  --network=my_network \
  -p $PG_PORT:5432 \
  -v pg_data:/var/lib/postgresql/data \
  -e POSTGRES_USER=$PG_USER \
  -e POSTGRES_DB=$PG_DATABASE \
  -e POSTGRES_INITDB_ARGS="--auth-host=md5 -c 'shared_preload_libraries=pg_stat_statements'" \
  -e POSTGRES_PASSWORD=your_password \
  -v $PG_INIT_SCRIPT:/docker-entrypoint-initdb.d/init.sql \
  postgres

# ... (continue with running FastAPI container)

# 注意:在生产环境中,你应该避免硬编码密码,并考虑使用安全的方式来存储和传递敏感信息。

在这个脚本中,我们添加了POSTGRES_DB环境变量来自动创建数据库,还挂载了一个包含CREATE DATABASE命令的初始化脚本到/docker-entrypoint-initdb.d/目录下,这样当数据库首次启动时,会自动执行该脚本创建数据库。

然而,请注意这种方法依赖于PostgreSQL的docker-entrypoint行为,且仅在首次初始化数据库时有效。后续重启容器不会再次执行初始化脚本。对于数据库结构或数据的变更,应在FastAPI应用内编写逻辑进行处理。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值