2015-01-07 6 views
8

मैं अपने नोड (एक्सप्रेसजेएस) एप्लिकेशन के लिए प्रॉक्सी सर्वर के रूप में nginx के एक डॉकराइज्ड संस्करण का उपयोग करने की कोशिश कर रहा हूं। कंटेनर के लिए nginx और प्रकाशन पोर्ट 80 के लिए किसी भी कॉन्फ़िगरेशन के बिना, मैं डिफ़ॉल्ट nginx लैंडिंग पृष्ठ देखने में सक्षम हूं। तो मुझे पता है कि बहुत काम कर रहा है।मैं nginx डॉकर कंटेनर के साथ localhost पर एक सर्वर का उपयोग कैसे करूं?

अब मैं अपनी साइटों-सक्षम निर्देशिका कि proxy_pass localhost:3000 के लिए विन्यास शामिल माउंट कर सकते हैं। मेरे पास मेरा नोड एप्लिकेशन स्थानीय रूप से चल रहा है (किसी भी डॉकर कंटेनर में नहीं) और मैं इसे पोर्ट 3000 (यानी localhost:3000) के माध्यम से एक्सेस कर सकता हूं। हालांकि, मुझे लगता है कि nginx कंटेनर चल रहा है, पोर्ट 80 पर मैप किया गया है, और मेरे लोकहोस्ट को प्रॉक्सी कर रहा है: 3000, कि मैं अपने बहुत सरल (हैलो वर्ल्ड) एप्लिकेशन को देख पाऊंगा। इसके बजाय मैं एक 502

मैं डोकर में कुछ पारित करने के लिए की जरूरत है प्राप्त? क्या यह संभवतः एक nginx विन्यास त्रुटि है?

server { 
    listen 0.0.0.0:80; 
    server_name localhost; 

    location/{ 
    proxy_pass http://localhost:3000; 
    } 
} 

मैं this question उपयोग करने की कोशिश की है, लेकिन यह मदद करने के लिए नहीं लगता था: यहाँ मेरी nginx विन्यास है। ऐसा तब तक है जब तक कि मैं कुछ पूरी तरह से गलत नहीं कर रहा हूं।

+0

संभावित डुप्लिकेट [स्थानीय MySQL सर्वर से डॉकर के माध्यम से कनेक्ट करें?] (Http://stackoverflow.com/questions/27556301/connect-to-local-mysql-server-through-docker) – Bryan

+0

मैंने इसे भी कोशिश की और इसे काम करने के लिए प्रतीत नहीं हो सका। मुझे पता है कि इसी तरह के सवाल से कई बार पूछा गया है और यहां तक ​​कि 502 त्रुटि भी हो रही है, लेकिन उनमें से कोई भी काम नहीं कर पाया है। जब मैं काम से घर हूं तो मैं फिर से जांच करूंगा। –

+0

DNS ftw, imo। मेजबान का नाम है;) – user2105103

उत्तर

7

दिखाया गया है here आप अपने वर्तमान आईपी पते प्राप्त कर सकते हैं:

ifconfig en0 | grep inet | grep -v inet6 | awk '{print $2}' 

तो फिर तुम docker run साथ --add-host ध्वज का उपयोग कर सकते हैं:

docker run --add-host localnode:$(ifconfig en0 | grep inet | grep -v inet6 | awk '{print \$2}') ... 

अपने proxypass उपयोग localnode बजाय localhost में।

+0

यह सही लाइनों के साथ था लेकिन वास्तव में मेरे लिए काम नहीं करता था। एक के लिए मैं अपने लैपटॉप से ​​काम कर रहा हूं इसलिए आईपी निकालने की मेरी विधि स्पष्ट रूप से अलग थी। मैंने 'en0' को बदलने के लिए एक ही विधि का उपयोग करने की कोशिश की लेकिन 'addr: 192.xxx.x.xx' के साथ परिणाम प्राप्त करना जारी रखा, इसलिए मैंने अंत में केवल हार्ड-कोड किया। मैं' addr: 'की शुरुआत को रोकने के लिए किस उपयोगिता का उपयोग करूंगा प्रदान करना जो डॉकर के साथ काम नहीं करेगा। फिर भी आपका धन्यवाद। मैं इस टिप्पणी को उन लोगों के लिए लिख रहा हूं जो इस समस्या से आते हैं। –

+0

कभी नहीं, मैंने 'addr:' शुरू करने के लिए 'sed' का उपयोग किया था। जैसा कि आप बता सकते हैं कि मैं एक sysops आदमी नहीं हूँ :) –

1

हां। डॉकर को आपकी मेजबान मशीन के बारे में जानना आवश्यक है। आप --add-host स्विच के साथ उस पर उपनाम सेट कर सकते हैं। एक * nix बॉक्स एक नाम "localbox" करने के लिए एक अन्य नाम बनाना, यह होगा:

docker run my_repo/my_image --add-host=localbox:<host_name>` 

boot2docker पर यह होगा:

docker run my_repo/my_image --add-host=localbox:192.168.59.3` 

जहां "192.168.59.3" के साथ बदलना चाहिए जो भी boot2docker ip रिटर्न।

उसके बाद, आप उर्फ ​​localbox के माध्यम से हमेशा अपने होस्ट मशीन का उपयोग करना चाहिए, ताकि बस करने के लिए अपने nginx config बदलने के लिए:

location/{ 
    proxy_pass http://localbox:3000; 
} 
संबंधित मुद्दे