समस्या मूल स्थान से संबंधित है। यदि आप डॉकटर कंटेनर के अंदर से लोकलहोस्ट को एक्सेस करते हैं, तो लोकलहोस्ट खुद डॉकटर की ओर इशारा करता है, होस्ट सर्वर को नहीं, और इसलिए कॉल होस्ट या अन्य डॉकर्स तक नहीं पहुंच रही है।
यदि आपके सभी डॉकर्स एक ही होस्ट मशीन पर हैं, तो उन्हें लोकलहोस्ट के माध्यम से एक-दूसरे से बात करने का सबसे आसान तरीका है कि कंटेनरों के बीच एक नेटवर्क साझा किया जाए। पहले बैकएंड को सामान्य रूप से चलाएं, फिर अन्य कंटेनरों को --net . के साथ प्रारंभ करें स्विच करें:
docker run [other params] -d -p 8080:8080 --name service-app-container service_app_image
docker run [other params] -p 3000:3000 --net="container:service-app-container" --name client-app-container client_app_image
अब नेटवर्क साझा करने वाले किसी भी कंटेनर द्वारा उजागर और मैप किए गए सभी पोर्ट किसी भी डॉकटर से लोकलहोस्ट के तहत उपलब्ध होने चाहिए।
- सेवा-ऐप-कंटेनर को कहीं से भी एक्सेस करने के लिए मशीन:8080 का उपयोग करें।
- होस्ट सर्वर से इसे स्थानीय रूप से एक्सेस करने के लिए, लोकलहोस्ट:8080 का उपयोग करें।
- सेवा ऐप से इसे आंतरिक रूप से एक्सेस करने के लिए, locahost:8080 का उपयोग करें।
- क्लाइंट ऐप से सर्विस ऐप एक्सेस करने के लिए, लोकलहोस्ट का उपयोग करें:8080
क्लाइंट ऐप को दुनिया के लिए पोर्ट 3000 पर ही उजागर किया जाएगा यदि आप इसे कंटेनर वाले डॉकटर में भी उजागर करते हैं। एक्सपोज़्ड पोर्ट एक जैसा नहीं होना चाहिए क्योंकि यह नेटवर्क को भ्रमित करता है:
docker run [other params] -d -p 8080:8080 3001:3000 --name service-app-container service_app_image
docker run [other params] -p 3000:3000 --net="container:service-app-container" client_app_image
अब आप मशीन:3001 का उपयोग करके क्लाइंट ऐप को बाहर से एक्सेस कर सकते हैं।