我有一个包含应用程序容器和 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/