2015-10-08 9 views
20

मैं एक पूर्ण विकास ढेर बनाने के लिए डॉकर-रचना का उपयोग कर रहा हूं।डॉकर-कंपोज़ का उपयोग करके एक दूसरे के साथ डॉकर कंटेनर को लिंक करते समय आईपी पते को कैसे संभालें?

एप्लिकेशन को काम करने के लिए एक MySQL सर्वर की आवश्यकता है।

my-application: 
    build: . # the Dockerfile resides in the current folder 
    ports: 
     - "9180:80" 
     - "9543:443" 
    external_links: 
     - mysql_mysql_1:mysql 
environment: 
    DOCKER_ENVIRONMENT: dev 
    DB_NAME: local_db 
    DB_PASS: password 
    DB_USER: root 
    DB_HOST: # how to set the mysql's IP address? 

मैं पारित नहीं कर सकते हैं:

mysql: 
    image: mysql:5.6 
    volumes: 
     - /data/mysql:/var/lib/mysql 
     - ./docker/mysql.d:/etc/mysql/conf.d 
    ports: 
     - "3306:3306" 
    environment: 
     MYSQL_ROOT_PASSWORD: password 

अनुप्रयोग की अपनी डोकर-compose.yml और संदर्भ mysql कंटेनर है:

mysql सर्वर डोकर-लिखें द्वारा एक बाहरी कंटेनर सेटअप है उन्हें डॉकर-कंपोज़ में गतिशील है क्योंकि यह गतिशील है।

मुझे पता है कि आवेदन mysql आईपी पते के बारे में पता है, जैसा कि मैंने कुछ वेरिएबल सेट है:

application-container$ env|grep ADDR 
    MYSQL_PORT_3306_TCP_ADDR=172.17.0.241 

फिर भी यह मेरी आवश्यक DB_HOST नहीं है।

क्या मैं किसी भी तरह से वैरिएबल को DB_HOST पर मैप कर सकता हूं या इसे अलग से सेट कर सकता हूं?

+1

आपका mysql सर्वर बाहरी डॉकर-कंपोज़र.आईएमएल फ़ाइल पर क्यों है? क्या यह वास्तव में आवश्यक है? आमतौर पर, यदि आपके पास कंटेनरकृत अनुप्रयोग हैं जो एक साथ चलने की आवश्यकता है तो आपको केवल एक डॉकर-कंपोज़र.आईएमएल में कॉन्फ़िगर करना होगा। – nessuno

+0

@nessuno मैं कई परियोजनाओं के लिए उस MySQL कंटेनर का उपयोग करना चाहता हूं। मुझे 12 माइस्क्ल सर्वरों की उड़ान भरने की ज़रूरत नहीं है।इसके अलावा, मैं mysql डेटा को '/ data/mysql' पर स्थित मेरे बड़े HDD पर मैप करता हूं, क्योंकि mysql डेटाबेस काफी बड़े हो सकता है। यदि आपके पास एक ही फ़ोल्डर में मैप किए गए एकाधिक MySQL उदाहरण हैं, तो फाइलसिस्टम लॉक समस्याओं का कारण बन जाएगा। – k0pernikus

+1

आप अपने एप्लिकेशन के साथ MySQL कंटेनर कॉन्फ़िगरेशन को एक साथ रख सकते हैं, मुझे लगता है कि आपको केवल '--no-recreate' ध्वज के साथ डॉकर-कंपोज़ चलाना होगा, मुझे लगता है। उसके बाद आपके पास केवल एक mysql कंटेनर है, और आप उस कंटेनर को सीधे उसके नाम का उपयोग करके डॉकर-compose.yml फ़ाइल में संदर्भित कर सकते हैं। इस प्रकार 'डीबी_एचओएसटी: mysql' बनाओ। – nessuno

उत्तर

24

आपको आईपी सेट करने की आवश्यकता नहीं है, लेकिन आप कंटेनर के आभासी होस्टनाम का संदर्भ दे सकते हैं, और यह वही मान है जैसा आपने अपने लिंक किए गए कंटेनर को नामित किया है।

आप वास्तव में docker-compose.yml के भीतर से DB_HOST सेट कर सकते हैं इसका मतलब यह है, या तो साथ links (अनुशंसित) या external_links:

your_application: 
    build: . 
    ports: 
     - "9180:80" 
     - "9543:443" 
    external_links: 
     - mysql_mysql_1:docker-mysql 
    environment: 
     DB_HOST: docker-mysql 

जब आप अपने डोकर कंटेनर से कनेक्ट के रूप में, आप अपने mysql कंटेनर से कनेक्ट कर सकते हैं:

application-container $ mysql -h docker-mysql -uroot -ppassword -p 3360 

यह वही काम करता है जब आप कंटेनर को उसी डॉकर-कंपोजर.आईएमएल से लिंक करते हैं।

यह भी documented है:

अन्य सेवा के लिए कंटेनरों के लिए लिंक। या तो सेवा नाम और लिंक उपनाम (सेवा: ALIAS), या केवल सेवा का नाम (जो उपनाम के लिए भी उपयोग किया जाएगा) दोनों निर्दिष्ट करें। - विवरण के लिए environment variable reference देख

172.17.2.186 db 
172.17.2.186 database 
172.17.2.187 redis 

पर्यावरण चर भी बनाया जाएगा:

links: 
- db 
- db:database 
- redis 

उर्फ ​​'नाम के साथ कोई प्रविष्टि इस सेवा, उदाहरण के लिए कंटेनर के अंदर/etc/hosts में बनाया जाएगा ।

+2

सावधान रहें, आज के रूप में डॉकर-कंपोज़ फ़ाइल के संस्करण 2 के साथ, पर्यावरण परिवर्तनीय संदर्भ अब और नहीं बनाए गए हैं। https://docs.docker.com/compose/link-env-deprecated/ –

+0

@MartinGOYOT यह सच है देखें। संस्करण 2 में, कंटेनर बदले नेटवर्किंग के बावजूद बॉक्स के बाहर एक दूसरे से कनेक्ट करने में सक्षम होना चाहिए। मैं जांच करूंगा कि क्या मैं एक संस्करण 2 उदाहरण जोड़ सकता हूं। यदि आप इसे अभी बनाने के बीच में हैं, तो आप संस्करण 2 के लिए भी एक नया उत्तर पोस्ट कर सकते हैं। – k0pernikus

+0

अच्छी तरह से आपका उत्तर संस्करण 2 पर अच्छी तरह से काम करता है। मैं केवल के संबंध में यह कह रहा था "पर्यावरण चर भी बनाए जाएंगे - विवरण के लिए पर्यावरण परिवर्तनीय संदर्भ देखें। " –

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