2014-11-28 18 views
44

से डॉकर कंटेनर का वेब सर्वर तक कैसे पहुंचे I boot2docker 1.3.1 के तहत चल रहा हूं।होस्ट

मेरे पास एक डॉकर कंटेनर uwsgi --http :8080 के माध्यम से एक वेब सर्वर चला रहा है।

यदि मैं कंटेनर से जुड़ा हूं तो मैं lynx http://127.0.0.1:8080 का उपयोग कर वेब साइट ब्राउज़ कर सकता हूं, इसलिए मुझे पता है कि सर्वर काम कर रहा है।

मैं के साथ मेरी कंटेनर भाग गया:

$ docker ps 
CONTAINER ID  IMAGE    COMMAND    CREATED    STATUS    PORTS      NAMES 
5248ad86596d  uwsgi_app:0.2  "bash"    11 minutes ago  Up 11 minutes  0.0.0.0:49159->8080/tcp cocky_hypatia 
$ docker inspect --format '{{ .NetworkSettings.IPAddress }}' 5248ad86596d 
172.17.0.107 

मैं मैं http://172.17.0.107:49159 पर जाकर मेरी मेजबान से है कि वेब साइट का उपयोग कर सकता है सोचा:

$ docker run -itP --expose 8080 uwsgi_app:0.2 

यह निम्नलिखित विवरण है।

यह काम नहीं करता है। मैं क्रोम में 'कनेक्टिंग ...' देखता हूं, कहीं नहीं जा रहा हूं।

मैं क्या गलत कर रहा हूं?

+0

क्या आप मैक या विंडोज पीसी पर Boot2Docker चला रहे हैं? मैं '$' – Bryan

+2

मैक की वजह से मैक मानने जा रहा हूं, शुक्रिया – Anentropic

उत्तर

33

ठीक है, मुझे बेवकूफ, मैं डॉक्स में जवाब boot2docker के लिए मिला https://docs.docker.com/installation/mac/#container-port-redirection

मैं यानी

$ boot2docker ip 
192.168.59.103 
बल्कि कंटेनर के आईपी से, boot2docker वी एम के आईपी पते का उपयोग करने की जरूरत है,

और मैं http://192.168.59.103:49159/

पर मेजबान से मेरी साइट ब्राउज़ करने में सक्षम हूँ मैं मेजबान पर किसी भी route जोड़ने की जरूरत नहीं थी

+1

आह, मैंने -P विकल्प नहीं खोजा। – Bryan

+2

मेरे मामले में मैंने 'रन-पी' विकल्प वाले बंदरगाहों को उलट दिया। '-पी 80: 5000'। यह हमारे स्थानीय मेजबान पर पोर्ट 80 पर हमारे कंटेनर के अंदर पोर्ट 5000 मैप करेगा। मैंने विपरीत किया। Https://docs.docker.com/userguide/usingdocker/ – Maxence

+2

समस्या निवारण के 1 दिन के बाद मेरी समस्या हल हो गई – David

0

[संपादित करें: मूल संस्करण प्रश्न में -पी अनदेखी था] 'प्रकाशित करें' करने के लिए बंदरगाह होने (जो अपनी संख्या में परिवर्तन) एक अच्छा रन है बिना

आप कंटेनरों को प्राप्त करना चाहते हैं here के माध्यम से।

sudo route -n add 172.17.0.0/16 172.16.0.11 

जो बताता है मैक कैसे VirtualBox के वी एम के अंदर निजी नेटवर्क के लिए रास्ते में करने के लिए कि डोकर कंटेनरों पर कर रहे हैं:

कुंजी इस लाइन है।

+0

बस यह जोड़कर कि यह मार्ग मेरे लिए ठीक नहीं है। मैं सोच रहा हूं कि यह आईपी '172.16.0.11' क्या है? क्या यह मेरा कंटेनर आईपी होना चाहिए? मैंने कोशिश की लेकिन यह काम नहीं करता है – Anentropic

+0

क्या आपने पूरा लेख पढ़ा था? – Bryan

+0

या यह एक: http: // viget।com/expand/how-to-use-docker-on-os-x-the-missing-guide – Bryan

4

आप here वर्णित के रूप में boot2docker पोर्ट मैपिंग विकल्प -L का उपयोग कर सकते हैं।

तो, आपके मामले में यह

boot2docker ssh -L 0.0.0.0:8080:localhost:8080 

और फिर

docker run -it -p 8080:8080 uwsgi_app:0.2 

इस तरह हो सकता है, आप boot2docker के आईपी पते का उपयोग करने की जरूरत नहीं है: आप स्थानीय होस्ट का उपयोग कर सकते हैं या अपने खुद आईपी पते (और आपके डॉकर कंटेनर को बाहर से एक्सेस किया जा सकता है)।

89

Anentropic'sanswer: boot2docker मैक और विंडोज के लिए पुराना ऐप है, docker-machine नया है।

सबसे पहले, अपने मशीनों की सूची:

$ docker-machine ls 

NAME  ACTIVE DRIVER  STATE  URL       SWARM 
default *  virtualbox Running tcp://192.168.99.100:2376 

फिर मशीनों में से एक (डिफ़ॉल्ट एक default कहा जाता है) का चयन करें और:

$ docker-machine ip default 

192.168.99.100 
+3

मेरे विंडोज़ मुद्दों को हल करें। –

+16

क्या यह जानकारी 2016 में अभी भी सही है? मुझे 'डॉकर-मशीन एलएस' चलाने से कोई परिणाम नहीं मिलता है, भले ही 'डॉकर पीएस' वर्तमान में चल रही चीजें दिखाता है। – Trejkaz

+0

अभी भी मेरे मैक पर मेरे लिए काम करता है। कोई त्रुटि संदेश नहीं? फिर से स्थापित करने का प्रयास करें https://docs.docker.com/docker-for-mac//https://docs.docker.com/docker-for-windows/। कुछ शैल कॉन्फ़िगरेशन एला https://docs.docker.com/machine/get-started/ को eval करने के लिए पुराने संस्करणों की आवश्यकता है। – HankCa

7

अपने कंटेनर के आईपी पते को खोजने के लिए, आपको की आवश्यकता नहीं है:

docker inspect <container> 

यह जानकारी का एक धन प्रदान करता है। आईपी ​​पते के लिए grep

1

एक ही समस्या थी और मेरे मामले में मैं एडब्ल्यूएस ईसी 2 उदाहरण का उपयोग कर रहा था। मैं कंटेनर आईपी के साथ कोशिश कर रहा था जो काम नहीं करता था। तब मैंने एडब्ल्यूएस मेजबान के वास्तविक सार्वजनिक आईपी को आईपी के रूप में इस्तेमाल किया, जो काम करता था।

+0

ओएमजी। इसके पीछे इतना समय बर्बाद हो गया। आश्चर्य है कि इस व्यवहार का कारण क्या है –

0

Boot2docker पुराना है, लेकिन आपको अभी भी विंडोज या मैक के लिए डॉकर पर यह समस्या हो सकती है, भले ही एक ही कंटेनर लिनक्स पर काम करता हो। एक लक्षण यह है कि कंटेनर के अंदर सर्वर पर किसी पृष्ठ तक पहुंचने का प्रयास करने से "कनेक्ट नहीं हो सका" के विपरीत त्रुटि "कोई डेटा नहीं भेजा गया" त्रुटि देता है।

यदि ऐसा है, तो ऐसा हो सकता है क्योंकि विन/मैक container host has its own IP पर, यह स्थानीयहोस्ट नहीं है क्योंकि यह लिनक्स पर है। आईपी ​​0.0.0.0 पर Django चलाने की कोशिश करें, जिसका अर्थ है सभी IP से कनेक्शन स्वीकार कर देते हैं: यदि आप सुनिश्चित करें कि सर्वर केवल इस तरह के nginx की तरह अपने स्थानीय प्रॉक्सी से ही स्थानीय अनुरोध (का जवाब बनाने की जरूरत है वैकल्पिक रूप से

python manage.py runserver 0.0.0.0:8000 

, , अपाचे, या गनिकोर्न) आप hostname -i द्वारा होस्ट किए गए होस्ट आईपी का उपयोग कर सकते हैं।

और सुनिश्चित करें कि आप -pport forwarding option का उपयोग docker run कमांड में सही ढंग से कर रहे हैं।

मान लें कि सभी ठीक है, आप मेजबान मशीन पर चल रहे ब्राउज़र में http://localhost पर अपने सर्वर तक पहुंचने में सक्षम होना चाहिए।

0

स्थानीय होस्ट ब्राउज़र

पर आवेदन की मेजबानी इस प्रक्षेपण के लिए नीचे दिए गए आदेश के साथ कंटेनर पर समस्या का निवारण कैसे, मेरे मामले में यह था:

[[email protected] ~]# docker ps -a 
CONTAINER ID  IMAGE    COMMAND    CREATED    STATUS      PORTS    NAMES 
1b81d8a0e3e1  centos:baseweb  "/bin/bash"   8 minutes ago  Exited (0) 24 seconds ago      webtest 
[[email protected] ~]# docker run --name=atul -v /root/dockertest:/var/www/html -i -t -p 5000:8000 centos:baseweb /bin/bash 

httpd विन्यास में:

[[email protected] /]# cd /etc/httpd/conf 
[[email protected] conf]# ll 
total 52 
-rw-r--r--. 1 root root 34419 Sep 19 15:16 httpd.conf 

सूची में पोर्ट 8000 के साथ फ़ाइल संपादित करें और Servername के तहत कंटेनर आईपी और पोर्ट अद्यतन करें।

httpd सेवा को पुनरारंभ करें और आप कर चुके हैं।

उम्मीद है कि यह

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