postgresql - 在启动 docker 容器之前创建数据库

标签 postgresql docker docker-compose gitlab devops

我有一个包含应用程序容器和 postgres 容器的 docker compose 文件。

应用程序依赖于 postgres 容器。

我想在应用程序容器开始连接到 postgres 并运行脚本以在那里创建数据库之前。我怎样才能在 docker compose 中做到这一点?有没有办法在依赖中间运行一些东西?

或者我应该在通过 ssh 连接到服务器时执行此操作,以便在部署阶段上下运行 docker compose。这样我还需要以某种方式在服务器中安装 psql 。我更喜欢第一个。

你能给我指出正确的方向吗?

最佳答案

I would like before the app container starts to connect to the postgres and run a script to create a database there.

您可以通过将 (SQL) 脚本安装到 Postgres 容器的 /docker-entrypoint-initdb.d 来实现类似的目的文件夹(参见 the image documentation – 初始化脚本)。这样一来,您的应用程序就不必连接到 PostgreSQL 容器,而是由容器自行完成。

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

关于postgresql - 在启动 docker 容器之前创建数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55934170/

相关文章:

Postgresql:使用jsonb字段查询时间范围

ruby-on-rails - 如何将我的 Rails 应用程序从 Sqlite3 切换到 postgresql?

docker - 错误 : "docker context create" requires exactly 1 argument

docker - 如何仅在开发环境中使用 docker-compose 附加卷?

docker - 如果零停机时间容器更新有多个实例,docker-compose 网络别名如何工作?

postgresql - 列名的问题在 PostgreSQL 中包含冒号

java - 如何使用docker remote api在java中创建容器?

docker - 成功安装 GPU Caffe 后将 Caffe 作为 CPU-only 运行

docker - 为docker-compose Web应用程序使用与localhost不同的主机名/URL

postgresql - 如何根据postgres中的列名更新列?