ऐसा लगता है कि आपकी स्क्रिप्ट को तोड़ दिया है।
व्याख्या:
PostgreSQL न केवल TCP/IP के माध्यम से, बल्कि UNIX सॉकेट के माध्यम से भी कनेक्शन स्वीकार कर सकता है। -h localhost
तर्क बताता है psql
UNIX सॉकेट के बजाय TCP कनेक्शन का उपयोग करने के लिए।
यदि आप वर्तमान में देखें docker-entrypoint.sh
संस्करण, आप देखेंगे, कि स्क्रिप्ट के निष्पादन के दौरान /docker-entrypoint-initdb.d
में PostgreSQL केवल UNIX सॉकेट पर सुनता है, और स्टार्टअप लॉग कहता है:
LOG: listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
इसका मतलब है कि psql -h localhost
डेटाबेस से कनेक्ट नहीं होगा, क्योंकि PostgreSQL IP सॉकेट पर नहीं सुनता है। आपको psql
. का उपयोग करना चाहिए बिना -h localhost
टीसीपी कनेक्शन के बजाय यूनिक्स सॉकेट का उपयोग करने का विकल्प।
लेकिन क्यों चल रहा है psql -h localhost
मैन्युअल रूप से काम करता है?
यदि आप docker-entrypoint.sh
में देखते हैं फिर से, आप देखेंगे कि जब सभी init स्क्रिप्ट निष्पादित की जाती हैं, तो PostgreSQL रुक गया
और फिर शुरू किया
फिर से सामान्य (परिचालन) मोड में, जिसमें यह UNIX और IP सॉकेट दोनों पर सुनता है:
LOG: listening on IPv4 address "0.0.0.0", port 5432
LOG: listening on IPv6 address "::", port 5432
LOG: listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
इसलिए, जब स्टार्टअप प्रक्रिया पूरी हो जाती है, तो आप TCP कनेक्शन का उपयोग करके PostgreSQL से जुड़ सकते हैं, इस प्रकार, कंटेनर में प्रवेश करके psql -h localhost
चला सकते हैं। सफल होता है।