Redis
 sql >> डेटाबेस >  >> NoSQL >> Redis

डॉकर रेडिस कनेक्शन ने मना कर दिया

आपकी समस्या

डॉकर कंपोज़ विभिन्न सेवाओं के लिए अलग डॉकटर कंटेनर बनाता है। प्रत्येक कंटेनर, तार्किक रूप से, अलग-अलग अलग कंप्यूटर सर्वरों की तरह है जो केवल डॉकटर नेटवर्क के माध्यम से एक दूसरे से जुड़े हुए हैं।

इस आरेख के प्रत्येक बॉक्स को एक व्यक्तिगत कंप्यूटर के रूप में देखें, तो व्यावहारिक रूप से आपके पास यही है:

+----------------------------------------------------------+
|                       your machine                       |
+----------------------------------------------------------+
                               |                    
        +------ (virtual network by docker) -------+
        |                      |                   |
+-----------------+ +-------------------+ +----------------+
| "php" container | | "redis" container | | "db" container |
+-----------------+ +-------------------+ +----------------+

आपका PHP कंटेनर "लोकलहोस्ट" में कोई रेडिस नहीं देखता है क्योंकि इसमें कोई रेडिस नहीं है। जैसे यह "लोकलहोस्ट" में कोई MySQL नहीं देखेगा। आपका रेडिस "रेडिस" कंटेनर में चल रहा है। आपका MySQL आपके "db" कंटेनर में चल रहा है।

जो चीजें आपको भ्रमित करती हैं, वे हैं पोर्ट बाइंडिंग निर्देश (यानी ports इस परिभाषा में):

redis:
  build:
    context: .
    dockerfile: Dockerfile_redis
  ports:
    - "6379:6379"

पोर्ट 6379 "रेडिस" कंटेनर का हिस्सा आपके कंप्यूटर से आबद्ध है, लेकिन केवल आपके कंप्यूटर से . अन्य कंटेनर के पास पोर्ट बाइंडिंग तक समान पहुंच नहीं है। तो आपका कंप्यूटर भी इसे '127.0.0.1:6379', php . से कनेक्ट कर सकता है कंटेनर ऐसा नहीं कर सकता।

समाधान

जैसा कि डॉकर कंपोज़ में नेटवर्किंग में वर्णित है, प्रत्येक डॉकटर कंपोज़ कंटेनर होस्टनाम के रूप में सेवा नाम का उपयोग करके अन्य कंटेनर तक पहुँच सकता है। उदाहरण के लिए, आपकी प्रोग्रामिंग सेवा द्वारा चल रही है php होस्टनाम db . के साथ आपकी MySQL सेवा को एक्सेस कर सकते हैं ।

तो आपको रेडिस को इसके होस्टनाम redis . से जोड़ना चाहिए

$redis = new \Redis();
try {
    $redis->connect('redis', 6379);
} catch (\Exception $e) {
    var_dump($e->getMessage())  ;
    die;
}


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. DigitalOcean पॉड में अनबाउंड तत्काल PersistentVolumeClaims

  2. रेडिस, पबसुब की घटनाओं को सुनना और उन्हें अधिक विश्वसनीय उपभोग के लिए एक स्ट्रीम में बदलना

  3. एक रेडिस सॉर्ट किए गए सेट के माध्यम से रिवर्स पेजिनेशन

  4. रेडिस कैश से सीधे सामग्री परोसने के लिए nginx का उपयोग करना

  5. संदेश की प्रतीक्षा में हिरेडिस