Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql 在旋转docker容器之前创建数据库_Postgresql_Docker_Docker Compose_Gitlab_Devops - Fatal编程技术网

Postgresql 在旋转docker容器之前创建数据库

Postgresql 在旋转docker容器之前创建数据库,postgresql,docker,docker-compose,gitlab,devops,Postgresql,Docker,Docker Compose,Gitlab,Devops,我有一个docker compose文件,其中包含一个应用程序容器和一个postgres容器 appone依赖于postgres容器 我希望在应用程序容器开始连接到postgres并运行脚本在那里创建数据库之前。在docker compose中如何执行此操作?有什么方法可以在依赖关系中运行某些东西吗?< /P> 或者,我应该在部署阶段通过ssh连接到服务器,上下运行docker compose时执行此操作。通过这种方式,我还需要在服务器中安装psql。我更喜欢第一个 你能给我指一下正确的方向吗

我有一个docker compose文件,其中包含一个应用程序容器和一个postgres容器

appone依赖于postgres容器

我希望在应用程序容器开始连接到postgres并运行脚本在那里创建数据库之前。在docker compose中如何执行此操作?有什么方法可以在依赖关系中运行某些东西吗?< /P> 或者,我应该在部署阶段通过ssh连接到服务器,上下运行docker compose时执行此操作。通过这种方式,我还需要在服务器中安装psql。我更喜欢第一个

你能给我指一下正确的方向吗

我希望在应用程序容器开始连接到postgres并运行脚本在那里创建数据库之前

您可以通过将(SQL)脚本装入Postgres容器的
/docker entrypoint initdb.d
文件夹(请参阅–初始化脚本)来实现类似的功能。这样,您的应用程序就不必连接到PostgreSQL容器,但容器可以自己完成所有操作


不过,这里的一个常见问题是,您的应用程序可能会在准备接受连接之前立即尝试连接到PostgreSQL,从而导致应用程序崩溃。您可以通过在应用程序中实现一些try-catch机制以等待PostgreSQL就绪,或者更改应用程序容器的入口点来避免这种情况,即
sleep 10&&[运行您的应用程序]

通过声明环境变量
POSTGRES\u DB
可以告诉POSTGRES在启动时创建一个空数据库并使用env vars名称

version: '3.5'

services:

  db:
    image: postgres:11.2-alpine
    restart: always
    environment:
      POSTGRES_DB: myDB
      POSTGRES_PASSWORD: myPassword
      POSTGRES_USER: myUser

其中一个答案对你有帮助吗?如果是,请接受并结束问题。否则,我们将尽力进一步帮助您。