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 ./databasedentro 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, ./databasesolo obtiene una datacarpeta, ./database/dataes 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 inspecty 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 dby db.create_all()desde docker rundespués de comenzar los contenedores. No lo hago initdbdirectamente desde la línea de comando.
sudo su -y mirar ./database/data. No hay nada allí por lo que puedo decir.
initdblínea de comando para inicializar el clúster de su base de datos?