PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

docker postgres avec les données initiales n'est pas conservé sur les commits

Le problème est que le Postgres Dockerfile déclare "/var/lib/postgresql/data" comme un volume. Il s'agit simplement d'un répertoire normal qui se trouve en dehors du système de fichiers Union utilisé par les images. Les volumes sont actifs jusqu'à ce qu'aucun conteneur ne leur soit lié et qu'ils soient explicitement supprimés.

Vous avez plusieurs choix :

  • Utilisez le --volumes-from commande pour partager des données avec de nouveaux conteneurs. Cela ne fonctionnera que s'il n'y a qu'une seule image postgres en cours d'exécution à la fois, mais c'est la meilleure solution.
  • Écrivez votre propre Dockerfile qui crée les données avant de déclarer le volume. Ces données seront ensuite copiées dans le volume lors de la création du conteneur.
  • Écrivez un point d'entrée ou un script cmd qui remplit la base de données au moment de l'exécution.

Toutes ces suggestions nécessitent que vous utilisiez Volumes pour gérer les données une fois le conteneur en cours d'exécution. Alternativement, vous pouvez écrire votre propre Dockerfile et simplement ne pas déclarer de volume. Vous pouvez alors utiliser docker commit pour créer une nouvelle image après avoir ajouté des données. Cela fonctionnera probablement à court terme, mais ce n'est certainement pas la façon dont vous devriez travailler avec les conteneurs - ce n'est pas reproductible et vous finirez par manquer de couches dans le système de fichiers de l'Union.

Consultez les documents Docker officiels sur la gestion des données dans les conteneurs pour plus d'informations.