我有一个项目,包含两个使用8个postgres数据库的主要java应用程序,所以有没有一种方法在docker-compose中构建8个不同的数据库,以便每个数据库拥有不同的所有者和密码?我甚至可以在docker-compose中做到这一点吗?
示例:
services:
postgresql:
build: db/.
ports:
- "5432:5432"
environment:
- POSTGRES_DB=database1
- POSTGRES_USER=database1
- POSTGRES_PASSWORD=database1
我知道我可以将所有.sql文件放在docker-entrypoint-initdb.d中,而postgres会自动生成它们,但是如何声明什么.sql文件进入哪个数据库?
TNX, 汤姆
答案 0 :(得分:4)
根据这个Github issue可能通过使用bash脚本来实现多个数据库,你必须在Dockerfile中传递它们
答案 1 :(得分:4)
好吧 - 看看这个Github项目:https://github.com/mrts/docker-postgresql-multiple-databases
根据官方postgres码头图片文档:
如果您想在从这个派生的图像中进行其他初始化,请在/docker-entrypoint-initdb.d下添加一个或多个* .sql,* .sql.gz或* .sh脚本(创建目录,如有必要)。在入口点调用initdb创建默认的postgres用户和数据库之后,它将运行任何* .sql文件,并在该目录中找到任何* .sh脚本,以便在启动服务之前进行进一步的初始化。
您可以在该回购中找到可以使用的准备好的脚本。
答案 2 :(得分:1)
通常,当我在一个Docker项目中需要多个数据库时,它就是一个测试数据库。我发现轻松启动第二个docker容器更容易,而不必担心脚本或卷分离。
主要技巧是不与默认端口冲突(例如postgres为5432),您可以使用。
然后docker-compose
可以像这样简单:
version: '3.0'
services:
db:
image: postgres
environment:
- POSTGRES_DB
- POSTGRES_USER
- POSTGRES_PASSWORD
ports:
- ${POSTGRES_DEV_PORT}:5432
volumes:
- app-volume:/var/lib/postgresql/data
db-test:
image: postgres
environment:
- POSTGRES_DB
- POSTGRES_USER
- POSTGRES_PASSWORD
ports:
- ${POSTGRES_TEST_PORT}:5432
# Notice I don't even use a volume here since I don't care to persist test data between runs
volumes:
app-volume: #