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

新手上路,请多包涵

我有一个项目,由两个使用八个 Postgres 数据库的主要 Java 应用程序组成,那么 docker-compose 有没有办法构建八个不同的数据库,以便每个数据库都有不同的所有者和密码?我什至可以在 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 文件放在哪个数据库中?

原文由 Tomislav Mikulin 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 880
2 个回答

根据这个 Github 问题,可能可以通过使用 bash 脚本来实现多个数据库,您必须在 Dockerfile 中传递这些脚本

编辑

要创建多个数据库,您可以使用以下脚本:

https://github.com/mrts/docker-postgresql-multiple-databases

或者

https://github.com/MartinKaburu/docker-postgresql-multiple-databases

这表明您必须克隆上述 git 存储库之一并将其作为卷安装到: /docker-entrypoint-initdb.d 然后您将能够使用以下方法传递多个数据库名称: POSTGRES_MULTIPLE_DATABASES 变量

原文由 Sergiu 发布,翻译遵循 CC BY-SA 4.0 许可协议

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

原文由 Ricardo Pedroni 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题