繁体   English   中英

初始化postgres数据库(不使用/docker-entrypoint-initdb.d)

[英]Initialize postgres database (without using /docker-entrypoint-initdb.d)

我试图在不使用入口点目录的情况下初始化数据库。

这是最小的Dockerfile:

FROM postgres:latest

POSTGRES_DB db
POSTGRES_USER user
POSTGRES_PASSWORD password

ADD db.sql /directory/
ADD script.sh /directory/

CMD ["sh", "/directory/script.sh"] 
# Or ENTRYPOINT ["/directory/script.sh"]?

script.sh

psql -d db -U user < /directory/db.sql

这不起作用,因为运行脚本时postgres没有启动。

如何在不使用/docker-entrypoint-initdb.d情况下运行db.sql

如果查看标准的postgres映像的入口点脚本 ,支持/docker-entrypoint-initdb.d目录的机制非常复杂:它需要引导数据库目录以及初始用户和数据库,然后它将在后台启动数据库服务器并运行该目录中的所有内容,最后运行数据库。 如果要复制此设置,则必须自己完成所有这些步骤。

但是,还有其他方法可以建立数据库。 您可以创建一个空数据库,然后正常运行应用程序的迁移以创建初始架构。 如果您有一个通常在运行psql客户端工具的数据库上运行的SQL文件,则可以使用Docker执行完全相同的操作

docker run -d -p 5432:5432 --name postgres postgres:12
psql -h localhost < db.sql

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM