В моем файле docker compose есть три контейнера: web, nginx и postgres. Postgres выглядит так:
postgres:
container_name: postgres
restart: always
image: postgres:latest
volumes:
- ./database:/var/lib/postgresql
ports:
- "5432:5432
Моя цель - смонтировать том, который соответствует локальной папке, называемой ./database
внутри контейнера postgres as /var/lib/postgres
. Когда я запускаю эти контейнеры и вставляю данные в postgres, я проверяю, что они /var/lib/postgres/data/base/
полны данных, которые я добавляю (в контейнер postgres), но в моей локальной системе ./database
получает только data
папку в ней, т.е. ./database/data
создается, но она пуста , Зачем?
Ноты:
- Это говорит о том, что мой файл должен работать.
- Этот человек пользуется услугами докера, что интересно
ОБНОВЛЕНИЕ 1
По предложению Ника, я сделал docker inspect
и нашел:
"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": ""
}
],
Это создает впечатление, что данные украдены другим томом, который я сам не кодировал. Не уверен, почему это так. Является ли изображение postgres тем объемом для меня? Если да, есть ли способ использовать этот том вместо тома, который я монтирую при перезапуске? Иначе, есть ли хороший способ отключить этот другой том и использовать мой собственный ./database
?
ОБНОВЛЕНИЕ 2
Я нашел решение, благодаря Нику! (и еще один друг) Ответ ниже.
from app import db
и db.create_all()
от А docker run
после запуска контейнеров. Я не initdb
прямо из командной строки.
sudo su -
и посмотреть ./database/data
. Насколько я могу судить, там ничего нет.
initdb
командную строку для инициализации кластера базы данных?