Мій файл докер-композиції містить три контейнери, веб, 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командний рядок для ініціалізації кластера вашої бази даних?