Docker和Docker-compose中的多个数据库

ctrmrzij  于 2023-01-12  发布在  Docker
关注(0)|答案(3)|浏览(235)

我有一个由两个主要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文件放在哪个数据库中呢?

yqkkidmi

yqkkidmi1#

通常当我在一个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: #

警告:显然,容器越多,内存占用量就越大

ergxz8rk

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,则可以使用以下命令传递多个数据库名称:邮政_多个_数据库变量

lnvxswe2

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上找到您可以使用的准备好的脚本。

相关问题