2015-10-11 8 views
5

मेरे पास एक रेल ऐप है। विकास और परीक्षण वातावरण में, मैं चाहता हूं कि रेल ऐप एक डॉकराइज्ड पोस्टग्रेज़ से कनेक्ट हो। रेल ऐप स्वयं एक कंटेनर में नहीं होगा - बस पोस्टग्रेस।पोस्टग्रेज़ डॉकर कंटेनर से कनेक्ट करने के लिए डेटाबेस.इमएल कैसे सेट करें?

मेरा डेटाबेस.मिल कैसा दिखना चाहिए?

मेरे पास एक डॉकर default मशीन चल रहा है।

postgres: 
    image: postgres 
    ports: 
    - "5432:5432" 
    environment: 
    - POSTGRES_USER=timbuktu 
    - POSTGRES_PASSWORD=mysecretpassword 

मैं docker-compose up भाग गया Postgres चलाने के लिए: मैं डोकर-compose.yml बनाया।

तब मैं डोकर आभासी मशीन का IP पता प्राप्त करने के लिए docker-machine ip default भाग गया, और मैं तदनुसार database.yml अद्यतन:

... 
development: 
    adapter: postgresql 
    host: 192.168.99.100 
    port: 5432 
    database: timbuktu_development 
    username: timbuktu 
    password: mysecretpassword 
    encoding: unicode 
    pool: 5 
... 

तो सब कुछ ठीक है और मैं अपने कंटेनर में Postgres से जुड़ सकते हैं।

लेकिन, अगर कोई अन्य रेपो खींचता है, तो वे मेरे डेटाबेस.इएमएल का उपयोग करके पोस्टग्रेस से कनेक्ट नहीं हो पाएंगे, क्योंकि उनके डॉकर डिफ़ॉल्ट मशीन का आईपी पता मेरा से अलग होगा।

तो मैं इसके लिए अपने डेटाबेस.आईएमएल को कैसे बदल सकता हूं?

एक विचार है कि मुझे उनके डॉकर डिफ़ॉल्ट मशीन का आईपी पता docker-machine env default चलाकर, और env DOCKER_HOST लाइन को उनके bash_rc में चिपकाकर पूछना है। उदाहरण के लिए,

export DOCKER_HOST="tcp://192.168.99.100:2376" 

तब मेरे database.yml मेजबान लाइन

host: <%= ENV['DOCKER_HOST'].match(/tcp:\/\/(.+):\d{3,}/)[1] %> 

शामिल कर सकते हैं लेकिन यह बदसूरत और hacky महसूस करता है। क्या कोई बेहतर तरीका है?

+0

आपका प्रश्न वास्तव में मुझे मेरे डॉकर सेटअप के साथ दबाया :) – theDrifter

उत्तर

3

आप एक सही वातावरण चर पहले सेट कर सकते हैं, और access it from your database.yml:

host: <%= ENV['POSTGRES_IP'] %> 
की तरह ( bash substring removal का प्रयोग करके) एक bashrc साथ

:

export DOCKER_HOST=$(docker-machine env default) 
export POSTGRES_IP=${DOCKER_HOST#tcp://} 
3

मैं एक सरल रास्ता मिल गया:

host: <%= `docker-machine ip default` %> 
+0

यह चाहिए काम भी करते हैं, मैं बस कॉन्फ़िगरेशन मान (पर्यावरण चर) को अलग करना पसंद करता हूं * कैसे * वह मान अधिग्रहण/सेट किया जाता है। फिर भी, +1। – VonC

+0

या 'होस्ट: <% = ENV [' POSTGRES_IP '] || \ 'डॉकर-मशीन आईपी डिफ़ॉल्ट \'%> ' – juanpastas

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