在Docker Compose中加载数据前等待Postgres准备就绪的方法是使用一个等待脚本来检查Postgres是否已经准备好接受连接。以下是一个示例的Docker Compose文件:
version: '3'
services:
db:
image: postgres
environment:
POSTGRES_USER: myuser
POSTGRES_PASSWORD: mypassword
ports:
- "5432:5432"
volumes:
- ./data:/var/lib/postgresql/data
command: postgres -c 'max_connections=250'
app:
build: .
depends_on:
- db
command: sh -c "wait-for-postgres && python app.py"
在上面的示例中,我们定义了两个服务:db和app。db服务使用postgres镜像,并设置了环境变量和端口映射。我们还将数据卷挂载到本地目录以持久化数据。
app服务是我们的应用程序服务,它依赖于db服务。我们使用了一个自定义的等待脚本wait-for-postgres来等待Postgres准备就绪。在脚本中,我们使用了一个循环来检查Postgres是否已经可以接受连接。一旦Postgres准备就绪,脚本将退出,然后我们可以启动应用程序。
以下是一个示例的wait-for-postgres脚本:
#!/bin/sh
set -e
host="$1"
shift
cmd="$@"
until PGPASSWORD=$POSTGRES_PASSWORD psql -h "$host" -U "$POSTGRES_USER" -c '\q'; do
>&2 echo "Postgres is unavailable - sleeping"
sleep 1
done
>&2 echo "Postgres is up - executing command"
exec $cmd
在脚本中,我们使用PGPASSWORD环境变量设置Postgres密码,并使用psql命令来连接到Postgres并执行一个简单的查询。如果连接失败,脚本将等待1秒钟,然后再次尝试连接。一旦连接成功,脚本将执行传递给它的命令。
这样,当我们使用Docker Compose启动应用程序时,它将等待Postgres准备就绪后再启动应用程序。这样可以确保应用程序在使用数据库之前不会出现连接错误。
这是一个简单的示例,你可以根据自己的需求进行修改和扩展。希望对你有帮助!
参考链接:
领取专属 10元无门槛券
手把手带您无忧上云