Wie Sie Daten in einer dockerisierten Postgres-Datenbank mit Volumes persistieren

Meine docker compose-Datei hat drei Container, web, nginx und postgres. Postgres sieht so aus:

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

Mein Ziel ist mount eine volume-das entspricht einem lokalen Ordner namens ./database innerhalb der postgres-container als /var/lib/postgres. Wenn ich beginne, diese Container und einfügen von Daten in postgres, die ich stellen Sie sicher, dass /var/lib/postgres/data/base/ ist voll von Daten, die ich hinzufüge (in der postgres-container), aber in meinem lokalen system, ./database bekommt nur eine data Ordner, d.h. ./database/data erstellt wird, aber es ist leer. Warum?

Hinweise:

UPDATE 1

Pro Nick ' s Vorschlag, ich habe ein docker inspect und gefunden:

    "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": ""
        }
    ],

Macht es scheinen, wie die Daten gestohlen von einem anderen volume habe ich nicht code selbst. Nicht sicher, warum das so ist. Ist der postgres-Bild erstellen, dass die Lautstärke für mich? Wenn ja, gibt es eine Möglichkeit zur Nutzung , volume statt das volume mounte ich, wenn ich neu starten? Ansonsten ist es eine gute Möglichkeit zu deaktivieren, dass andere Volumen und mit meinen eigenen, ./database?

UPDATE 2

Ich die Lösung gefunden, vielen Dank an Nick! (und ein anderer Freund) Antwort unten.

Kommentar zu dem Problem - Öffnen
haben Sie bereits die initdb - Befehlszeile, die zum starten Ihres Datenbank-cluster? Kommentarautor: Sebastian Webber
Sind Sie sicher, dass Ihre Daten Unterverzeichnis ist wirklich leer? Es könnten spezielle Zugriffsrechte. Kommentarautor: Yaroslav Stavnichiy
Vielen Dank für immer zurück zu mir so schnell! Ich bin mit einem Fläschchen app, so dass ich aus dem app-import-db und db.create_all() aus docker run nach dem starten der Container. Ich weiß nicht initdb direkt aus der Kommandozeile. Kommentarautor: Alex Lenail
@YaroslavStavnichiy ich weiß nicht, wie sonst, um zu überprüfen, die als sudo su - und suchen Sie in ./Datenbank/data. Es gibt nichts in es, soweit ich das sagen kann. Kommentarautor: Alex Lenail

InformationsquelleAutor der Frage Alex Lenail | 2017-01-13

Schreibe einen Kommentar