EDIT - जुलाई 23, 2015 के बाद से
आधिकारिक postgres डोकर छवि चलेंगे .sql
लिपियों में पाया /docker-entrypoint-initdb.d/
फ़ोल्डर।
तो आपको निम्नलिखित एसक्यूएल स्क्रिप्ट बनाने की आवश्यकता है:
init.sql
CREATE USER docker;
CREATE DATABASE docker;
GRANT ALL PRIVILEGES ON DATABASE docker TO docker;
और इसे अपने डॉकरफाइल में जोड़ें:
Dockerfile
FROM library/postgres
COPY init.sql /docker-entrypoint-initdb.d/
लेकिन जुलाई 8 वीं, 2015, के बाद से यदि आपको केवल एक उपयोगकर्ता और डेटाबेस बनाने के लिए है , यह करने के लिए सिर्फ मेकअप उपयोग करने के लिए आसान है POSTGRES_USER
, POSTGRES_PASSWORD
और POSTGRES_DB
वातावरण चर:
docker run -e POSTGRES_USER=docker -e POSTGRES_PASSWORD=docker -e POSTGRES_DB=docker library/postgres
या डॉकफाइल के साथ:
FROM library/postgres
ENV POSTGRES_USER docker
ENV POSTGRES_PASSWORD docker
ENV POSTGRES_DB docker
23 जुलाई 2015 से पुरानी छवियों के लिए
से postgres डोकर छवि के प्रलेखन , यह कहा जाता है कि
[...] यह किसी भी * .sh स्क्रिप्ट को उस निर्देशिका में पाया जाता है [ /docker-entrypoint-initdb.d
] सेवा शुरू करने से पहले आगे की शुरुआत करने के लिए [ ]
यहाँ महत्वपूर्ण है "सेवा शुरू करने से पहले" । इसका मतलब है कि आपकी स्क्रिप्ट make_db.sh को पोस्टग्रेज सेवा शुरू होने से पहले निष्पादित किया जाएगा, इसलिए त्रुटि संदेश "डेटाबेस पोस्टग्रेज से कनेक्ट नहीं हो सका" ।
उसके बाद एक और उपयोगी जानकारी है:
यदि आपको अपने आरंभ के हिस्से के रूप में SQL कमांड निष्पादित करने की आवश्यकता है, तो Postgres एकल उपयोगकर्ता मोड का उपयोग अत्यधिक अनुशंसित है।
इस पर सहमत पहली नज़र में थोड़ा रहस्यमय हो सकता है। यह क्या कहता है कि आपकी इनिशियलाइज़ेशन स्क्रिप्ट को अपने कार्यों को करने से पहले पोस्टग्रेज सेवा को एकल मोड में शुरू करना चाहिए। इसलिए आप अपनी make_db.ksh स्क्रिप्ट को निम्नानुसार बदल सकते हैं और यह आपको जो आप चाहते हैं उसके करीब पहुंचना चाहिए:
ध्यान दें , यह हाल ही में निम्नलिखित प्रतिबद्ध में बदल गया है । यह नवीनतम परिवर्तन के साथ काम करेगा:
export PGUSER=postgres
psql <<- EOSQL
CREATE USER docker;
CREATE DATABASE docker;
GRANT ALL PRIVILEGES ON DATABASE docker TO docker;
EOSQL
पहले, --single
मोड के उपयोग की आवश्यकता थी:
gosu postgres postgres --single <<- EOSQL
CREATE USER docker;
CREATE DATABASE docker;
GRANT ALL PRIVILEGES ON DATABASE docker TO docker;
EOSQL
gosu postgres postgres --single < /tmp/somefile.sql