Meine Docker-Erstellungsdatei enthält 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 es, ein Volume ./databasebereitzustellen, das einem lokalen Ordner entspricht, der im Postgres-Container als aufgerufen wird /var/lib/postgres. Wenn ich diese Container starte und Daten in Postgres einfüge, überprüfe ich, ob /var/lib/postgres/data/base/die Daten, die ich hinzufüge , voll sind (im Postgres-Container), aber in meinem lokalen System wird ./databasenur ein dataOrdner darin angezeigt , dh er ./database/datawird erstellt, aber er ist leer . Warum?
Anmerkungen:
- Dies legt nahe, dass meine obige Datei funktionieren sollte.
- Diese Person nutzt Docker-Dienste, was interessant ist
UPDATE 1
Per Nicks Vorschlag habe ich ein gemacht docker inspectund festgestellt:
"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": ""
}
],
Was den Anschein erweckt, als würden die Daten von einem anderen Volume gestohlen, das ich selbst nicht codiert habe. Ich bin mir nicht sicher, warum das so ist. Erstellt das Postgres-Bild dieses Volumen für mich? Wenn ja, gibt es eine Möglichkeit, dieses Volume anstelle des Volumes zu verwenden , das ich beim Neustart bereitstelle? Gibt es sonst eine gute Möglichkeit, dieses andere Volume zu deaktivieren und mein eigenes zu verwenden ./database?
UPDATE 2
Ich habe die Lösung gefunden, danke an Nick! (und ein anderer Freund) Antworte unten.
from app import dbund db.create_all()von einem docker runnach dem Start die Container. Ich nicht initdbdirekt von der Kommandozeile.
sudo su -und nachsehen soll ./database/data. Soweit ich das beurteilen kann, ist dort nichts drin.
initdbBefehlszeile aus, um Ihren Datenbankcluster zu initialisieren?