Comment faire pour conserver les données dans un dockerized base de données postgres à l'aide de volumes

Mon menu fixe composer fichier a trois conteneurs, web, nginx, et postgres. Postgres ressemble à ceci:

postgres:
  container_name: postgres
  restart: always
  image: postgres:latest
  volumes:
    - ./database:/var/lib/postgresql
  ports:
    - "5432:5432

Mon objectif est de monter un volume qui correspond à un dossier local appelé ./database à l'intérieur de la postgres conteneur /var/lib/postgres. Quand j'ai commencer ces conteneurs et insérer des données dans postgresql, j'ai vérifier que /var/lib/postgres/data/base/ est plein de données, je suis en ajoutant (dans la postgres conteneur), mais dans mon système local, ./database obtient seulement une data dossier en elle, c'est à dire ./database/data est créé, mais il est vide. Pourquoi?

Notes:

Mise à JOUR de 1

Par Nick suggestion, j'ai fait un docker inspect et trouvé:

    "Mounts": [
        {
            "Source": "/Users/alex/Documents/MyApp/database",
            "Destination": "/var/lib/postgresql",
            "Mode": "rw",
            "RW": true,
            "Propagation": "rprivate"
        },
        {
            "Name": "e5bf22471215db058127109053e72e0a423d97b05a2afb4824b411322efd2c35",
            "Source": "/var/lib/docker/volumes/e5bf22471215db058127109053e72e0a423d97b05a2afb4824b411322efd2c35/_data",
            "Destination": "/var/lib/postgresql/data",
            "Driver": "local",
            "Mode": "",
            "RW": true,
            "Propagation": ""
        }
    ],

Qui permet de croire que les données volées par un autre volume, je n'ai pas de code moi-même. Pas sûr pourquoi. Est la postgres image de la création de ce volume pour moi? Si oui, est-il un moyen d'utiliser que le volume plutôt que le volume, je suis de montage lorsque je redémarre? Sinon, est-il un bon moyen de la désactivation de cet autre volume et en utilisant ma propre, ./database?

Mise à JOUR 2

J'ai trouvé la solution, merci à Nick! (et autre ami) Réponse ci-dessous.

  • avez-vous déjà exécuté la initdb ligne de commande pour initialiser votre cluster de base de données?
  • Êtes-vous sûr que vos données sous-répertoire est vraiment vide? Il peut avoir des autorisations d'accès spéciales.
  • Merci de revenir vers moi si vite! Je suis à l'aide d'un flacon d'application, donc je from app import db et db.create_all() à partir d'un docker run après le démarrage de l'conteneurs. Je n'ai pas initdb directement à partir de la ligne de commande.
  • Je ne sais pas comment vérifier que sudo su - et de regarder dans ./database/data. Il n'y a rien là-dedans aussi loin que je peux dire.
  • Quelqu'un pourrait trouver cela utile: exemple de fichier composer la persistance de postgres, elastic search et supports de données, stackoverflow.com/a/56475980/5180118
InformationsquelleAutor Alex Lenail | 2017-01-13