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 ./databaseall'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 ./databasesolo una datacartella, cioè ./database/dataviene 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 inspecte 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 dbe db.create_all()da docker rundopo aver avviato i contenitori. Non lo faccio initdbdirettamente dalla riga di comando.
sudo su -e guardarlo ./database/data. Non c'è niente lì dentro per quanto posso dire.
initdbriga di comando per inizializzare il tuo cluster di database?