Mi archivo de compilación de Docker tiene tres contenedores, web, nginx y postgres. Postgres se ve así:
postgres:
container_name: postgres
restart: always
image: postgres:latest
volumes:
- ./database:/var/lib/postgresql
ports:
- "5432:5432
Mi objetivo es montar un volumen que corresponda a una carpeta local llamada ./database
dentro del contenedor de postgres como /var/lib/postgres
. Cuando inicio estos contenedores e inserto datos en postgres, verifico que /var/lib/postgres/data/base/
está lleno de los datos que estoy agregando (en el contenedor de postgres), pero en mi sistema local, ./database
solo obtiene una data
carpeta, ./database/data
es decir, se crea, pero está vacío . ¿Por qué?
Notas:
- Esto sugiere que mi archivo anterior debería funcionar.
- Esta persona está utilizando los servicios de Docker, lo cual es interesante.
ACTUALIZACIÓN 1
Según la sugerencia de Nick, hice una docker inspect
y encontré:
"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": ""
}
],
Lo que hace que parezca que los datos están siendo robados por otro volumen que no codifiqué yo mismo. No estoy seguro de por qué es eso. ¿La imagen de postgres está creando ese volumen para mí? Si es así, ¿hay alguna forma de usar ese volumen en lugar del volumen que estoy montando cuando reinicio? De lo contrario, ¿hay una buena manera de desactivar ese otro volumen y usar el mío ./database
?
ACTUALIZACIÓN 2
Encontré la solución, gracias a Nick! (y otro amigo) Responde a continuación.
from app import db
y db.create_all()
desde docker run
después de comenzar los contenedores. No lo hago initdb
directamente desde la línea de comando.
sudo su -
y mirar ./database/data
. No hay nada allí por lo que puedo decir.
initdb
línea de comando para inicializar el clúster de su base de datos?