【发布时间】:2021-10-19 01:14:19
【问题描述】:
我有一个包含我的 Postgres 数据库的 Docker 容器。它使用的是官方的Postgres image,它有一个 CMD 条目,可以在主线程上启动服务器。
我想在开始侦听查询之前运行RUN psql –U postgres postgres < /dump/dump.sql 来填充数据库。
我不明白 Docker 怎么可能做到这一点。如果我将RUN 命令放在 CMD 之后,当然永远不会到达,因为 Docker 已经完成了对 Dockerfile 的读取。但是如果我将它放在CMD 之前,它将在 psql 甚至作为进程存在之前运行。
如何在 Docker 中预填充 Postgres 数据库?
【问题讨论】:
-
你可以启动你的docker Postgresql容器,然后
docker exec -it container psql –U postgres postgres < /dump/dump.sql,即使这不是一个完美的解决方案,而且使用supervisor似乎有点过头了(docs.docker.com/articles/using_supervisord) -
数据库必须侦听连接才能获取数据。您可以使用仅允许访问某个 IP、UNIX 套接字、另一个端口等的配置来启动它,具体取决于你的配置。然后加载您的数据,然后将配置更改为正常。
-
postgres 映像具有添加在 /docker-entrypoint-initdb.d 目录中启动时执行的脚本的功能。在服务正式启动之前,您将使用 --single 参数执行 postgres 以“私下”执行此操作。这里有一个使用启动脚本扩展图像的好例子:registry.hub.docker.com/u/sameersbn/postgresql 看看启动脚本,它确实 --single
-
你的意思是哪个启动脚本?页面上有几个。如果有正确的方法可以做到这一点,并且您可以向我展示正确的部分,请将其发布为答案,我会将其标记为正确!
-
@DanielVérité,谢谢,每天都能学到新东西!
标签: database postgresql docker