2014-10-05 8 views
5

मैं डॉकर के साथ सरल पोस्टग्रेस सर्वर बनाने की कोशिश कर रहा हूं। मैं अपने कंटेनर के लिए आधार के रूप में आधिकारिक postgres image का उपयोग करता हूं। मेरे Dockerfile इन आदेशों में शामिल हैं:पोस्टग्रेज़। मैं डेटाबेस और उपयोगकर्ता कैसे बना सकता हूं?

FROM postgres 
USER postgres 
RUN /etc/init.d/postgresql start &&\ 
    psql --command "CREATE USER user WITH SUPERUSER PASSWORD 'user';" &&\ 
    createdb -O user app 

और जब मैं इसे चलाने का प्रयास करने पर मुझे त्रुटि है:

psql: could not connect to server: No such file or directory Is the server running locally and accepting connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"?

क्या मैं गलत कर रहा हूँ?

+2

क्या आपने यह जांच लिया था "* क्या सर्वर स्थानीय रूप से चल रहा है और यूनिक्स डोमेन सॉकेट * पर कनेक्शन स्वीकार कर रहा है?" –

उत्तर

2

यह संभव है कि पोस्टग्रेस कनेक्शन स्वीकार करने में कुछ समय लगे। जिस तरह से आपने इसे लिखा है, यह स्टार्ट फ़ंक्शन रिटर्न के तुरंत बाद उपयोगकर्ता को CREATE को कॉल करेगा। वहां सोने में डालने का प्रयास करें और देखें कि यह अभी भी एक समस्या है या नहीं।

1

प्रविष्टि बिंदु में एक स्क्रिप्ट के अंदर एक ही समस्या थी। पीछा कर रहा है मेरी Dockerfile अंश

# init execution 
ENTRYPOINT ["/usr/local/sbin/initpostgres.sh"] 
निम्न कमांड के साथ

intipostgres.sh स्क्रिप्ट

su postgres -c "pg_ctl start -l /var/lib/postgresql/logpostgres" 
su postgres -c "createuser -s $OPENERPUSER" 

@seanmcl प्रति CreateUser आदेश से पहले sleep 1 जोड़ने के अंदर सुझाव सुधार मेरे लिए काम किया: pg_ctl

su postgres -c "pg_ctl start -l /var/lib/postgresql/logpostgres" 
sleep 1 
su postgres -c "createuser -s $OPENERPUSER" 
1

उपयोग -w ध्वज के साथ, जब सर्वर शुरू हो गया है तो आदेश समाप्त हो जाएगा। इस बारे में और कोई आश्चर्य नहीं कि क्या हमने काफी देर तक इंतजार किया है। और हम वास्तव में सर्वर उसी तरह

sudo -u postgres pg_ctl start -w -D ${PGDATA} 

sudo -u postgres psql --command "CREATE USER user WITH SUPERUSER PASSWORD 'user';" &&\ 
sudo -u postgres createdb -O user app 

sudo -u postgres pg_ctl stop -w 
1

समस्या हो कि postgres यूनिक्स सॉकेट आपके मेजबान मशीन पर नहीं है लगता है रोक सकता है। आप निम्न आदेश चलाकर इसे ठीक कर सकते हैं।

docker run -p 5432:5432 --volume="/run/postgresql:/run/postgresql" -d --name postgres postgres

अनिवार्य हिस्सा --volume झंडा है। यह उस फ़ोल्डर को लिंक करता है जिसमें यूनिक्स सॉकेट फ़ाइल शामिल है। अन्य प्रक्रियाओं द्वारा पढ़ने के लिए होस्ट मशीन पर PGSQL.5432।

यह Installing PostgreSQL within a docker container का एक डुप्लिकेट प्रश्न जैसा प्रतीत होता है, क्या यह सही ओपी है?

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