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