web-dev-qa-db-fra.com

Plusieurs bases de données dans docker et docker-compose

J'ai un projet composé de deux principales applications Java qui utilisent huit bases de données PostgreSQL, alors y a-t-il un moyen dans Docker-Composer de construire huit bases de données différentes afin que chacune ait un propriétaire et un mot de passe différents? Puis-je même le faire dans Docker-compose?

exemple:

services:
    postgresql:
        build: db/.
        ports:
            - "5432:5432"
        environment:
          - POSTGRES_DB=database1
          - POSTGRES_USER=database1
          - POSTGRES_PASSWORD=database1

Je sais que je peux mettre tous les fichiers .sql dans le docker-entrypoint-initdb.d et postgres les fera automatiquement, mais comment déclarer quel fichier .sql va dans quelle base de données?

Tnx, Tom

10
Tomislav Mikulin

Selon ce Github issue il serait possible de réaliser plusieurs bases de données en utilisant des scripts bash que vous devrez passer dans votre Dockerfile

[~ # ~] modifier [~ # ~] :

Pour créer plusieurs bases de données, vous pouvez utiliser le script suivant:

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

ou

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

Ce qui suggère que vous devez cloner l'un des dépôts git ci-dessus et le monter en tant que volume sur: /docker-entrypoint-initdb.d alors vous pourrez passer plusieurs noms de base de données en utilisant: POSTGRES_MULTIPLE_DATABASES variable

5
Sergiu

Eh bien, jetez un œil à ce projet Github: https://github.com/mrts/docker-postgresql-multiple-databases

Selon la documentation officielle des images de docker postgres:

Si vous souhaitez effectuer une initialisation supplémentaire dans une image dérivée de celle-ci, ajoutez un ou plusieurs scripts * .sql, * .sql.gz ou * .sh sous /docker-entrypoint-initdb.d (création du répertoire si nécessaire ). Une fois que le point d'entrée a appelé initdb pour créer l'utilisateur et la base de données postgres par défaut, il exécute tous les fichiers * .sql et source tous les scripts * .sh trouvés dans ce répertoire pour effectuer une initialisation supplémentaire avant de démarrer le service.

Vous trouverez le script préparé sur ce dépôt que vous pourriez utiliser.

5
Przemek Nowak