आप मूल command
. को ओवरराइड कर रहे हैं और आप इस स्क्रिप्ट में पोस्टग्रेज शुरू नहीं करते हैं, इसलिए आपका डेटाबेस उपलब्ध नहीं है।
आप अपने डेटाबेस इनिशियलाइज़ेशन को कंटेनर की एंट्रीपॉइंट डायरेक्टरी में डाल सकते हैं:/docker-entrypoint-initdb.d
. यह सभी *.sh
. को निष्पादित करता है और *.sql
फ़ाइलें इस निर्देशिका में हैं और मूल command
. को स्पर्श नहीं करती हैं .
इस निर्देशिका की सभी फ़ाइलें कंटेनर निर्माण पर वर्णानुक्रम में स्वचालित रूप से निष्पादित होती हैं . इसलिए, अपनी स्क्रिप्ट/एसक्यूएल फाइलों को एंट्रीपॉइंट में जोड़ने के लिए वॉल्यूम बनाएं और कंटेनर को उन्हें निष्पादित करने दें। यह आधिकारिक पोस्टग्रेज दस्तावेज़ीकरण में वर्णित है, अनुभाग "इस छवि का विस्तार कैसे करें"
।
आपकी लिखें फ़ाइल तब कुछ इस तरह बदल जाती है:
postgres:
build: ./postgres
volumes:
- /shared_folder/postgresql:/var/lib/postgresql
- ./db-init-scripts:/docker-entrypoint-initdb.d
ports:
- "5432:5432"
जबकि एक स्थानीय निर्देशिका, उदा। db-init-scripts
, में आपकी आरंभीकरण स्क्रिप्ट शामिल हैं (यदि आप चाहें तो इसका नाम बदलें)। कॉपी create_db.sh
इस फ़ोल्डर में और जब आप एक नया कंटेनर बनाते हैं तो इसे स्वचालित रूप से निष्पादित किया जाएगा।
कई डेटाबेस-छवियां इस प्रविष्टि बिंदु-निर्देशिका को देखती हैं, जो बहुत सुविधाजनक है।
आपका container_name: postgres
बेमानी लगता है।