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

时间:2017-10-10 13:38:04

标签: postgresql docker docker-compose

我有一个项目,包含两个使用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, 汤姆

3 个答案:

答案 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: #