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 ./database
bereitzustellen, 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 ./database
nur ein data
Ordner darin angezeigt , dh er ./database/data
wird 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 inspect
und 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 db
und db.create_all()
von einem docker run
nach dem Start die Container. Ich nicht initdb
direkt von der Kommandozeile.
sudo su -
und nachsehen soll ./database/data
. Soweit ich das beurteilen kann, ist dort nichts drin.
initdb
Befehlszeile aus, um Ihren Datenbankcluster zu initialisieren?