यह अनसुलझे hostname
. के कारण है डॉकर होस्ट से। डॉकर में, उदाहरण mongo1
, mongo2
, और mongo3
उन नामों से पहुंचा जा सकता है। हालाँकि, ये नाम डॉकर होस्ट से उपलब्ध नहीं हैं। यह इस पंक्ति से स्पष्ट होता है:
Addr: mongo2:27017, Type: Unknown, State: Connected, Average RTT: 0, Last error: dial tcp: lookup mongo2: no such host
MongoDB ड्राइवर server discovery
का प्रयास करेगा एक प्रतिकृति सेट सदस्य (सदस्यों) से दिया गया; यह प्रतिकृति सेट के भीतर अन्य सभी नोड्स को ढूंढेगा (के माध्यम से rs.conf
) यहाँ समस्या यह है कि प्रतिकृति सेट नाम के साथ सेट किया गया है mongo<N>
, ड्राइवर (डॉकर होस्ट में चलाएँ) इन नामों को हल करने में सक्षम नहीं होगा। आप mongo1
. को पिंग करके इसकी पुष्टि कर सकते हैं डॉकर होस्ट से।
आप या तो किसी अन्य डॉकर इंस्टेंस से एप्लिकेशन को चलाने का प्रयास कर सकते हैं और उसी डॉकर नेटवर्क को प्रतिकृति सेट के रूप में साझा कर सकते हैं। या, हल करने योग्य होस्टनामों को अनुमति देने के लिए डॉकर नेटवर्किंग को इस प्रकार संशोधित करें।
अद्यतन:
mongo का उपयोग क्यों कर रहे हैं, इस पर आपकी टिप्पणी के संबंध में खोल, या PyMongo काम करता है।
यह कनेक्शन मोड में अंतर के कारण है। एकल नोड निर्दिष्ट करते समय, अर्थात mongodb://node1:27017
शेल या पाइमोंगो में, सर्वर की खोज नहीं की जा रही है। इसके बजाय यह उस एकल नोड से जुड़ने का प्रयास करेगा (प्रतिकृति सेट के रूप में भाग के रूप में नहीं)। पकड़ यह है कि आपको लिखने के लिए प्रतिकृति सेट के प्राथमिक नोड से कनेक्ट करने की आवश्यकता है (आपको यह जानना होगा कि कौन सा है)। यदि आप प्रतिकृति सेट के रूप में कनेक्ट करना चाहते हैं, तो आपको प्रतिकृति सेट नाम को परिभाषित करना होगा।
mongo-go-driver
. के विपरीत , डिफ़ॉल्ट रूप से यह सर्वर की खोज करेगा और प्रतिकृति सेट के रूप में कनेक्ट करने का प्रयास करेगा। यदि आप एकल नोड के रूप में कनेक्ट करना चाहते हैं, तो आपको connect=direct
specify निर्दिष्ट करना होगा यूआरआई के संबंध में। यह भी देखें उदाहरण कनेक्ट डायरेक्ट