2016-08-02 11 views
7

मैं डॉकर के लिए नया हूं। मैंने PostgreSQL छवि को बढ़ाया है और छवि चलाते समय नया डीबी इंस्टेंस बनाने में सक्षम है। मुझे उस डीबी में टेबल स्क्रिप्ट से टेबल बनाने की आवश्यकता है जो .sql फ़ाइल निष्पादित करेगा। PostgreSQL छवि चलाते समय यह कहता है कि सर्वर शुरू नहीं हुआ है? पोस्टग्रेएसक्यूएल सर्वर डॉकर कंटेनर में शुरू होने के बाद ही हम स्क्रिप्ट कैसे निष्पादित कर सकते हैं?PostgreSQL डॉकर छवि में तालिका बनाएं

Dockerfile:

FROM postgres:9.3 
ENV POSTGRES_USER docker 
ENV POSTGRES_PASSWORD docker 
ENV POSTGRES_DB docker 
RUN apt-get update && apt-get install -y postgresql-9.3 postgresql-client-9.3 postgresql-contrib-9.3 
ADD initialize.sh /home/MM0312/docker-entrypoint-initdb.d/initialize.sh 
CMD ["/home/MM0312/docker-entrypoint-initdb.d/initialize.sh"] 

initialize.sh

#!/bin/bash 
set -e 
set -x 

echo "******PostgreSQL initialisation******" 
gosu docker psql -h localhost -p 5432 -U docker -d $docker -a -f createDatabase.sql 

createDatabase.sql फ़ाइल

REATE TABLE web_origins (
    client_id character varying(36) NOT NULL, 
    value character varying(255) 
); 

उत्तर

12

official docker image of postgres की docker-entrypoint.sh स्क्रिप्ट में लिखा है:

psql+=(--username "$POSTGRES_USER" --dbname "$POSTGRES_DB") 

     echo 
     for f in /docker-entrypoint-initdb.d/*; do 
      case "$f" in 
       *.sh)  echo "$0: running $f"; . "$f" ;; 
       *.sql) echo "$0: running $f"; "${psql[@]}" < "$f"; echo ;; 
       *.sql.gz) echo "$0: running $f"; gunzip -c "$f" | "${psql[@]}"; echo ;; 
       *)  echo "$0: ignoring $f" ;; 
      esac 
      echo 
done 

तो प्रत्येक .sql फ़ाइल जिसे आप अपने डॉकर छवि के अंदर निष्पादित करना चाहते हैं, उसे उस फ़ोल्डर के अंदर रखा जा सकता है। तो मेरी dockerfile

FROM postgres:9.3 
ENV POSTGRES_USER docker 
ENV POSTGRES_PASSWORD docker 
ENV POSTGRES_DB docker 
ADD CreateDB.sql /docker-entrypoint-initdb.d/ 

तरह लग रहा है और मेरे CreateDB.sql की सामग्री:

docker run -d my-postgres 

जांच करने के लिए:

docker exec -it 6250aee43d12 bash 
[email protected]:/# psql -h localhost -p 5432 -U docker -d docker 
psql (9.3.13) 
Type "help" for help. 

docker=# \c 
You are now connected to database "docker" as user "docker". 
docker=# \dt 
      List of relations 
Schema | Name  | Type | Owner 
--------+-------------+-------+-------- 
public | web_origins | table | docker 
(1 row) 

CREATE TABLE web_origins (
    client_id character varying(36) NOT NULL, 
    value character varying(255) 
); 

तो मैं बस अपना कंटेनर के साथ शुरू

+0

धन्यवाद, यह काम किया। –

+0

डॉकर कंपोज़ के साथ इसे कैसे संभालें? – kamal

+0

क्या हमें बस इसकी प्रतिलिपि बनाने की आवश्यकता है, जैसा कि मैं अपने मामले में देख सकता हूं db.sql को डॉकर-एंट्रीपॉइंट-initdb.d निर्देशिका में कॉपी किया गया है, लेकिन एसक्यूएल कमांड नहीं चला। – kamal

संबंधित मुद्दे