首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何在Docker Compose中加载数据前等待Postgres准备就绪

在Docker Compose中加载数据前等待Postgres准备就绪的方法是使用一个等待脚本来检查Postgres是否已经准备好接受连接。以下是一个示例的Docker Compose文件:

代码语言:txt
复制
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脚本:

代码语言:txt
复制
#!/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准备就绪后再启动应用程序。这样可以确保应用程序在使用数据库之前不会出现连接错误。

这是一个简单的示例,你可以根据自己的需求进行修改和扩展。希望对你有帮助!

参考链接:

  • Docker Compose文档:https://docs.docker.com/compose/
  • Postgres镜像:https://hub.docker.com/_/postgres
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

领券