Mon fichier de composition Docker a trois conteneurs, Web, Nginx et PostgreSQL. Postgres ressemble à ceci:
postgres:
container_name: postgres
restart: always
image: postgres:latest
volumes:
- ./database:/var/lib/postgresql
ports:
- "5432:5432
Mon objectif est de monter un volume qui correspond à un dossier local appelé ./database
à l'intérieur du conteneur postgres comme /var/lib/postgres
. Lorsque je démarre ces conteneurs et que j'insère des données dans PostgreSQL, je vérifie qu'elles /var/lib/postgres/data/base/
sont pleines des données que j'ajoute (dans le conteneur PostgreSQL), mais dans mon système local, ./database
ne contient qu'un data
dossier, c'est ./database/data
-à- dire qu'il est créé, mais il est vide . Pourquoi?
Remarques:
- Cela suggère que mon fichier ci-dessus devrait fonctionner.
- Cette personne utilise des services de docker, ce qui est intéressant
MISE À JOUR 1
Selon la suggestion de Nick, j'ai fait un docker inspect
et trouvé:
"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": ""
}
],
Ce qui donne l'impression que les données sont volées par un autre volume que je n'ai pas codé moi-même. Je ne sais pas pourquoi. L'image postgres crée-t-elle ce volume pour moi? Si oui, existe-t-il un moyen d'utiliser ce volume au lieu du volume que je monte lorsque je redémarre? Sinon, est - il une bonne façon de désactiver cet autre volume et en utilisant mon propre, ./database
?
MISE À JOUR 2
J'ai trouvé la solution, grâce à Nick! (et un autre ami) Répondez ci-dessous.
from app import db
et db.create_all()
d'un docker run
après le démarrage des conteneurs. Je ne suis pas initdb
directement à partir de la ligne de commande.
sudo su -
et regarder ./database/data
. Pour autant que je sache, il n'y a rien là-dedans.
initdb
ligne de commande pour initialiser votre cluster de base de données?