我有一个由两个主要Java应用程序组成的项目,它们使用8个Postgres数据库,那么在docker-compose中是否有办法构建8个不同的数据库,使每个数据库都有不同的所有者和密码?
示例:
services:
postgresql:
build: db/.
ports:
- "5432:5432"
environment:
- POSTGRES_DB=database1
- POSTGRES_USER=database1
- POSTGRES_PASSWORD=database1
我知道我可以把所有的. sql文件放在docker-entrypoint-initdb. d中,Postgres会自动生成它们,但是我如何声明哪个. sql文件放在哪个数据库中呢?
3条答案
按热度按时间yqkkidmi1#
通常当我在一个docker项目中需要多个数据库时,它就是一个测试数据库。我发现简单地启动第二个docker容器更容易,而不用担心脚本或卷分离。主要的技巧是不要冲突默认端口(例如postgres的5432),这样你就可以开始了。那么
docker-compose
就可以像这样简单:警告:显然,容器越多,内存占用量就越大
ergxz8rk2#
根据这一点,Github issue可能可以通过使用bash脚本来实现多个数据库,您必须在Dockerfile中传递这些脚本
编辑:
要创建多个数据库,可以使用以下脚本:
https://github.com/mrts/docker-postgresql-multiple-databases
或
https://github.com/MartinKaburu/docker-postgresql-multiple-databases
这意味着你必须克隆上面的一个git repos,并将其挂载为一个卷:/docker-entrypoint-initdb.d,则可以使用以下命令传递多个数据库名称:邮政_多个_数据库变量
lnvxswe23#
好吧-看看这个Github项目:https://github.com/mrts/docker-postgresql-multiple-databases
根据官方postgres docker图像文档:
如果要在从该映像派生的映像中执行其他初始化,请在/docker-entrypoint-initdb.d下添加一个或多个 .sql、.sql.gz或 *.sh脚本(如果需要的话创建目录).在入口点调用initdb来创建默认的postgres用户和数据库之后,它将运行在该目录中找到的任何 *.sql文件和任何 *.sh脚本,以便在启动服务之前进行进一步的初始化。
您将在该repo上找到您可以使用的准备好的脚本。