2016-03-02 12 views
23

मैं अपनी कॉन्फ़िगरेशन में बहिष्कृत डॉकर लिंक से छुटकारा पाने की कोशिश कर रहा हूं। जब मैंने एक कंटेनर बनाया था तो Bad Gateway nginx रिवर्स प्रॉक्सी त्रुटियों से छुटकारा पा रहा है।डॉकर नेटवर्क Nginx Resolver

नोट: मैं पुल मोड में डॉकर नेटवर्क का उपयोग कर रहा हूं। (docker network create nettest)

मैं nginx अंदर निम्नलिखित विन्यास टुकड़ा उपयोग कर रहा हूँ:

location/{ 
     resolver 127.0.0.1 valid=30s; 
     set $backend "http://confluence:8090"; 
     proxy_pass $backend; 
  1. मैं नाम nettest के साथ मेरी डोकर नेटवर्क पर होस्ट नाम confluence के साथ एक कंटेनर शुरू कर दिया।
  2. फिर मैंने नेटवर्क nettest पर nginx कंटेनर शुरू किया।
  3. मैं nginx कंटेनर
  4. confluence
  5. nginx लॉग nginx कंटेनर की /etc/hosts फाइल के अंदर सूचीबद्ध है अंदर से confluence पिंग कर सकते हैं का कहना है कि `भेज() विफल (111: कनेक्शन अस्वीकृत) है, जबकि हल करने समाधानकर्ता: 127.0.0.1: 53``
  6. मैं /etc/resol.conf
  7. nginx लॉग से डोकर नेटवर्क डिफ़ॉल्ट DNS रिसोल्वर 127.0.0.11 की कोशिश की कहते हैं confluence could not be resolved (3: Host not found)

कोई भी जानता है कि डॉकर नेटवर्क के साथ nginx रिज़ॉल्वर को कॉन्फ़िगर कैसे करें या डॉकर नेटवर्क होस्टनाम को सही तरीके से हल करने के लिए Nginx को कैसे बल देना है, इस पर एक विकल्प।

+0

में नहीं काम करता है इस एक नेटवर्क ड्राइवर के बिना किसी भी तरह से हल किया जा जाएगा ऐसा प्रतीत नहीं होता। एक संकल्पक के लिए आईपी की आवश्यकता के कारण Nginx कारण है और इसे किसी भी डॉकर प्रबंधित DNS रिज़ॉल्वर से स्वचालित रूप से लिंक नहीं किया जा सकता है। – blacklabelops

उत्तर

43

सबसे पहले, आपको 127.0.0.11 पर डॉकर एम्बेडेड DNS सर्वर का उपयोग करना चाहिए।

आपकी समस्या निम्न में से 1 की वजह से हो सकता है:

  1. nginx DNS क्वेरी की आईपीवी 6 (AAAA रिकॉर्ड) का उपयोग करने की कोशिश कर रहा है।

    समाधान के लिए https://stackoverflow.com/a/35516395/1529493 देखें।

    मूल रूप से कुछ की तरह:

    फिक्स करने के लिए बाहरी सर्वर (#21396)

    के लिए नहीं आगे डोकर डोमेन आईपीवी 6 प्रश्न:

    http { 
        resolver 127.0.0.11 ipv6=off; 
    } 
    

    यह शायद नहीं रह गया है डोकर 1.11 के साथ एक समस्या है

  2. ध्यान रखें कि आपपर गलती से ओवरराइड नहीं करते हैंविन्यास निर्देश। मेरे मामले में मैंने server ब्लॉक resolver 8.8.8.8 8.8.4.4;Mozilla's SSL Configuration Generator से http ब्लॉक में resolver 127.0.0.11; को ओवरराइड कर रहा था। वह मुझे लंबे समय तक मेरे सिर खरोंच कर रहा था ...


कैसे DNS सर्वर का आईपी पता हार्डकोड से बचने के लिए के लिए https://trac.nginx.org/nginx/ticket/658#comment:5 देखें।

असल में, उदा, अपने डोकर कंटेनर के लिए एक स्टार्टअप स्क्रिप्ट बनाने, .:

#!/bin/bash 

export NAMESERVERS=$(cat /etc/resolv.conf | grep "nameserver" | awk '{print $2}' | tr '\n' ' ') 

envsubst '$NAMESERVERS' </etc/nginx/nginx.conf.tmpl> /etc/nginx/nginx.conf 

exec nginx -g "daemon off;" 

को देखते हुए आप जैसे है

http { 
    # ... 

    resolver $NAMESERVERS; 

    include /etc/nginx/conf.d/*.conf; 
} 

/etc/nginx/nginx.conf.tmpl में।

व्यक्तिगत रूप से मैं confd का उपयोग करता हूं, जो चीजों को और अधिक प्रबंधनीय बनाता है।

+0

धन्यवाद, पूरी तरह से काम करता है! – blacklabelops

+0

धन्यवाद इससे मुझे भी मदद मिली – Plato

+4

डॉकर DNS रिज़ॉल्वर ('127.0.0.11') के आईपी पते को हार्डकोड करना कोई मुद्दा नहीं होना चाहिए, क्योंकि यह नहीं बदलेगा। ध्यान दें कि डॉकर DNS रिज़ॉल्वर केवल उपयोगकर्ता परिभाषित नेटवर्क ('डॉकर नेटवर्क बनाएं ... ') के साथ उपलब्ध है। संदर्भ: https://github.com/docker/docker/issues/22652 –

0

127.0.0.1 का उपयोग करने के लिए आपको dnsmasq जैसे स्थानीय डीएनएस सर्वर की आवश्यकता है। apk add --update dnsmasq का उपयोग करके इसे इंस्टॉल करने का प्रयास करें और यदि आप अल्पाइन (nginx:alpine) संस्करण का उपयोग कर रहे हैं तो इसे सेट अप करें।

0

शायद तुम जाँच करनी चाहिए अपने कंटेनर के /etc/resolv.conf

यह अपने कंटेनर की सही DNS config से पता चलता है और फिर रिसोल्वर के लिए कि DNS सर्वर आईपी का उपयोग करें।

127.0.0.11 क्षेत्र लगानेवाला

+0

कृपया स्वीकृत उत्तर पर एक नज़र डालें। चूंकि एक स्वीकार्य उत्तर है, इसका तात्पर्य है कि ओपी का मुद्दा पहले ही हल हो चुका है और यह एक उत्तर का एकमात्र उद्देश्य है। यह तुम्हारा काफी अनावश्यक बनाता है। –

+0

ओह क्षमा करें, बस अतिरिक्त सिफारिश के लिए। चूंकि मेरे दोस्त ने शिकायत की है कि यह काम नहीं करता है, शायद हम उत्तर को अधिक सावधानी से पढ़ेंगे – exiaohao

+0

मुझे पता है कि आप स्टैक ओवरफ़्लो के लिए नए हैं और सबसे पहले आपको नियमों में उपयोग करने की आवश्यकता है। इसमें क्या शामिल है कि उत्तर खोल केवल ओपी के मुद्दे को हल करता है। तो केवल एकमात्र और पूर्ण उत्तर के अलावा कुछ भी नहीं। तो कोई अतिरिक्त सवाल, सुझाव, इशारा या जो भी हो। वैसे, स्टैक ओवरफ़्लो में आपका स्वागत है। :-) –

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