होस्ट करने के लिए डॉक कंटेनर से कनेक्ट करना


10

मेरे पास एक सेटअप है जहां मैं अपनी वेबसाइट के सभी हिस्सों को डॉकटर कंटेनरों में चलाता हूं। मेरा नाज़िनक्स जो पोर्ट 80 पर सुनता है और 443 एक कंटेनर में चलता है।

363292a98545        scivm/nginx-django-scivmcom:latest   /usr/bin/supervisord   12 days ago         Ghost               0.0.0.0:40001->22/tcp, 88.198.57.112:443->443/tcp, 88.198.57.112:80->80/tcp     lonely_feynmann           

मैं किसी अन्य कंटेनर में एक सेवा के लिए एक प्रॉक्सी सेट करना चाहता हूं। यह कंटेनर मेजबान पर 3000 बंदरगाह के लिए बाध्य है:

b38c8ef72d0a        mazzolino/strider-dind:latest        wrapdocker /usr/bin/   41 minutes ago      Up 41 minutes       0.0.0.0:3000->3000/tcp, 22/tcp, 27017/tcp                                       distracted_einstein      

डॉक होस्ट पर मेरे iptables इस तरह दिखते हैं:

root@Ubuntu-1204-precise-64-minimal /var/run # iptables -L
Chain INPUT (policy ACCEPT) target     prot opt source               destination         
ACCEPT     all  --  anywhere             anywhere            
ACCEPT     all  --  anywhere             anywhere             ctstate RELATED,ESTABLISHED
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:ssh
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:http
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:https
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:8000
DROP       all  --  anywhere             anywhere            

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     all  --  anywhere             anywhere            
ACCEPT     all  --  anywhere             anywhere            
ACCEPT     all  --  anywhere             anywhere             ctstate RELATED,ESTABLISHED

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         

कंटेनर के भीतर से, मैं iptables कॉन्फ़िगरेशन के कारण होस्ट मशीन पर पोर्ट 3000 से कनेक्ट करने में असमर्थ हूं।

मैं सार्वजनिक इंटरनेट पर पोर्ट 3000 नहीं खोलना चाहता।

क्या पोर्ट 3000 पर कंटेनर और होस्ट के बीच सीधा पुल खोलने का कोई तरीका है?

या क्या मुझे अपने iptables को docker ip श्रेणी से स्वीकार करने के लिए संशोधित करना चाहिए?

जवाबों:


5

आपको केवल डॉकर की लिंक क्षमताओं की आवश्यकता है [पदावनत]

बस उन सभी जटिल सामानों से छुटकारा पाएं जो आपने करने की कोशिश की और नामित कंटेनरों का उपयोग करना शुरू कर दिया और फिर उन्हें एक-दूसरे से जोड़ दिया।


मैंने डॉक लिंक क्षमताओं पर एक नज़र डाली, लेकिन अगर मैं सही ढंग से समझूं तो इसमें कुछ मुद्दे हैं। 1. यदि बच्चे को फिर से शुरू किया जाता है तो उसे एक नया आईपी पता मिलेगा। फिर उस बच्चे के सभी माता-पिता को नए वातावरण के वैरिएबल प्राप्त करने के लिए भी पुनरारंभ करने की आवश्यकता होगी। 2. मुझे कनेक्शन बनाने के लिए उन पर्यावरण चर को पढ़ने के लिए अपने आवेदन में तर्क जोड़ना होगा।
user3133475

एक पुनः आरंभ किए गए कंटेनर ( docker restart your_container) को आईपी एड्रेस रखना चाहिए। यदि आप किसी दिए गए चित्र के आधार पर एक नया कंटेनर चलाते हैं, तो उसे एक नया IP ( docker run -d image command) मिलेगा ।
एलियास प्रोब्स्ट

2
यह सच हुआ करता था, लेकिन कम से कम डॉकटर 1.0 के रूप में "डॉकटर रीस्टार्ट" कंटेनर को एक नया आईपी पता देता है। बस इसे कुछ स्क्रिप्ट में हिट करें जो कि आईपी के पिछले व्यवहार पर निर्भर करता है, जो नहीं बदल रहा है।
जामशीद

1
जबकि मुझे लगता है कि यह ओपी के लिए शायद सही बात है, मैं यहां सवाल के जवाब की तलाश में आया हूं। यानी होस्ट पर किसी सेवा से कैसे लिंक करें।
mc0e

2

इलायस का जवाब सही है, लेकिन लिंक लंबा और भ्रमित करने वाला है। यहाँ एक सरल सारांश है:

सबसे पहले, कंटेनर को लिंक करने के लिए चलाएँ, और उसे नाम दें:

sudo docker run -d --name db training/postgres

फिर दूसरे कंटेनर को चलाएं, इसे पहले कंटेनर से लिंक करें:

sudo docker run -d -P --name web --link db:db training/webapp python app.py

पहले कंटेनर से दूसरे कंटेनर में लिंक डाल दिया जाता है /etc/hosts। इसलिए आप इसे hostname की तरह इस्तेमाल कर सकते हैं। उदाहरण के लिए:

sudo docker run --name web --link db:db training/webapp ping db
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.