संपादित करें - 23 जुलाई 2015 से
आधिकारिक पोस्टग्रेज डॉकर छवि .sql
चलाएगी /docker-entrypoint-initdb.d/
. में मिली स्क्रिप्ट फ़ोल्डर।
तो आपको केवल निम्नलिखित sql स्क्रिप्ट बनाने की आवश्यकता है:
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 से पुराने चित्रों के लिए
पोस्टग्रेज़ डॉकर छवि के दस्तावेज़ीकरण से, ऐसा कहा जाता है कि
<ब्लॉकक्वॉट>
[...] यह उस निर्देशिका में मिली किसी भी *.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