मेरी डॉक कम्पोज़ फ़ाइल में तीन कंटेनर, वेब, नेग्नेक्स और पोस्टग्रेज हैं। इस तरह दिखता है पोस्टग्रैज:
postgres:
container_name: postgres
restart: always
image: postgres:latest
volumes:
- ./database:/var/lib/postgresql
ports:
- "5432:5432
मेरा लक्ष्य एक मात्रा को माउंट करना है जो एक स्थानीय फ़ोल्डर से मेल खाती है जिसे ./database
पोस्टग्रैज कंटेनर के अंदर कहा जाता है /var/lib/postgres
। जब मैं इन कंटेनरों को शुरू करता हूं और पोस्टग्रेज में डेटा सम्मिलित करता हूं, तो मैं सत्यापित करता हूं कि मैं /var/lib/postgres/data/base/
जो डेटा जोड़ रहा हूं (पोस्टग्रेज कंटेनर में) भरा हुआ है, लेकिन मेरे स्थानीय सिस्टम में, इसमें ./database
केवल एक data
फ़ोल्डर मिलता है , अर्थात ./database/data
बनाया जाता है, लेकिन यह खाली है । क्यों?
टिप्पणियाँ:
- यह सुझाव देता है कि मेरी उपरोक्त फ़ाइल को काम करना चाहिए।
- यह व्यक्ति डॉकटर सेवाओं का उपयोग कर रहा है जो दिलचस्प है
अद्यतन १
निक के सुझाव के अनुसार, मैंने किया 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
,?
अद्यतन २
मैं समाधान मिल गया, निक के लिए धन्यवाद! (और दूसरा दोस्त) नीचे उत्तर दें।
from app import db
और कंटेनर शुरू करने के बाद db.create_all()
से docker run
। मैं initdb
सीधे कमांड लाइन से नहीं ।
sudo su -
और में देखो ./database/data
। वहाँ कुछ भी नहीं है जहाँ तक मैं बता सकता हूँ।
initdb
अपने डेटाबेस क्लस्टर को इनिशियलाइज़ करने के लिए कमांड लाइन चलाते हैं ?