Il mio file di composizione docker ha tre contenitori, web, nginx e postgres. Postgres si presenta così:
postgres:
container_name: postgres
restart: always
image: postgres:latest
volumes:
- ./database:/var/lib/postgresql
ports:
- "5432:5432
Il mio obiettivo è montare un volume corrispondente a una cartella locale chiamata ./database
all'interno del contenitore postgres come /var/lib/postgres
. Quando avvio questi contenitori e inserisco i dati in Postgres, verifico che /var/lib/postgres/data/base/
sia pieno dei dati che sto aggiungendo (nel contenitore Postgres), ma nel mio sistema locale, contiene ./database
solo una data
cartella, cioè ./database/data
viene creato, ma è vuoto . Perché?
Appunti:
- Questo suggerisce che il mio file sopra dovrebbe funzionare.
- Questa persona sta usando i servizi docker che è interessante
AGGIORNAMENTO 1
Per suggerimento di Nick, ho fatto un docker inspect
e ho trovato:
"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": ""
}
],
Il che fa sembrare che i dati vengano rubati da un altro volume che non ho codificato. Non sono sicuro del perché. L'immagine di Postgres sta creando quel volume per me? In tal caso, esiste un modo per utilizzare quel volume invece del volume che sto montando al riavvio? In caso contrario, c'è un buon modo di disabilitazione che altro volume e utilizzando il mio, ./database
?
AGGIORNAMENTO 2
Ho trovato la soluzione, grazie a Nick! (e un altro amico) Rispondi sotto.
from app import db
e db.create_all()
da docker run
dopo aver avviato i contenitori. Non lo faccio initdb
direttamente dalla riga di comando.
sudo su -
e guardarlo ./database/data
. Non c'è niente lì dentro per quanto posso dire.
initdb
riga di comando per inizializzare il tuo cluster di database?