2016-10-14 8 views
9

मुझे डॉकर-कंपोज़ के साथ डॉकर लॉन्च करने में समस्याएं हैं।

जब मैं docker-compose -f dev.yml build चलाने मैं त्रुटि>

Building postgres 
ERROR: Couldn't connect to Docker daemon - you might need to run `docker-machine start default`. 

निम्नलिखित लेकिन अगर मैं docker-machine ls मशीन को चलाने के लिए स्पष्ट रूप से अप>

NAME  ACTIVE DRIVER  STATE  URL       SWARM DOCKER ERRORS 
default -  virtualbox Running tcp://192.168.99.100:2376   v1.12.1 

मैं eval "$(docker-machine env default)" जिसके बाद docker-compose -f dev.yml build सफलतापूर्वक पूरा चलाकर त्रुटि ठीक कर दी है।

मेरा प्रश्न यह क्यों काम करता है, वास्तव में क्या होता है और मैं इसे कैसे पूर्ववत करता हूं?

यह भी ठीक करने का यह एक सुरक्षित तरीका है? अभी यह सिर्फ मेरा लैपटॉप है, लेकिन इन कंटेनरों को निकट भविष्य में कंपनी सर्वरों को मारना है।

मैं पार्टी के साथ सुपर धाराप्रवाह नहीं कर रहा हूँ, लेकिन मैं हमेशा से eval चलाने के लिए और विशेष रूप से के साथ "

उत्तर

16

जब आप docker आदेश चलाते हैं, तो सीएलआई डॉकर डिमन के एपीआई से जुड़ता है, और यह एपीआई है जो वास्तव में काम करता है। आप एपीआई कनेक्शन विवरण बदलकर अपने स्थानीय सीएलआई से रिमोट डॉकर होस्ट का प्रबंधन कर सकते हैं, जो क्लाइंट पर पर्यावरण चर में डॉकर स्टोर करता है जहां सीएलआई चलता है।

डॉकर मशीन के साथ, आपका डॉकर इंजन वीएम में चल रहा है, जो प्रभावी रूप से एक दूरस्थ मशीन है, इसलिए आपके स्थानीय सीएलआई को उससे कनेक्ट करने के लिए कॉन्फ़िगर करने की आवश्यकता है। डॉकर मशीन इंजनों के कनेक्शन कनेक्शन को जानता है, इसलिए docker-machine env defaultdefault मशीन के विवरणों को प्रिंट करता है। बजाय सिर्फ सांत्वना के लिए उन्हें लिखने की,

$ docker-machine env default 
export DOCKER_TLS_VERIFY="1" 
export DOCKER_HOST="tcp://172.16.62.130:2376" 
export DOCKER_CERT_PATH="/Users/elton/.docker/machine/machines/default" 
export DOCKER_MACHINE_NAME="default" 

का उपयोग eval उन export आदेशों में से प्रत्येक को निष्पादित करता है, तो यह आपके वातावरण चर की स्थापना की एक त्वरित तरीका है: उत्पादन कुछ इस तरह है।

आप इसे पूर्ववत कर सकते हैं और docker-machine env --unset के साथ स्थानीय वातावरण को रीसेट कर सकते हैं, जो आपको पर्यावरण को अनसेट करने के लिए आउटपुट देता है (इसलिए सीएलआई स्थानीय डॉकर इंजन से कनेक्ट करने का प्रयास करेगा)।

+0

आह, तो क्या मुझे यह अधिकार मिल जाएगा, इसके बिना मेरे डॉकर कमांड केवल वास्तव में काम करेगा यदि मेरे पास एसएसएच सत्र डॉकर वीएम के लिए खुला था? –

+0

हां, यदि आप वीएम को एसएसएच करते हैं और 'डॉकर' आदेश चलाते हैं, तो वे स्थानीय डॉकर इंजन के खिलाफ निष्पादित करेंगे। आप रिमोट डॉकर इंजन के साथ काम करने के लिए पर्यावरण चर का उपयोग कर सकते हैं - डॉकर मशीन बस इसे आसान बनाता है, और कनेक्शन को सुरक्षित रखने का भी ख्याल रखता है। –

3

यह वास्तव में एक मशीन है कि मूल रूप से डोकर का समर्थन नहीं करता पर डोकर उपयोग करने के लिए की उम्मीद तरीका है eval को चलाने के लिए नहीं नहीं बताया https://docs.docker.com/machine/get-started/

क्या इस कदम करता है (मैं सुझाव है कि आप भी इस खुद की कोशिश):

, विंडोज या मैक ओएस एक्स पर जैसे

डोकर प्रलेखन यहाँ डोकर मशीन का उपयोग कर के लिए अपने विवरण में इस चरण में शामिल

  • रन docker-machine env default
  • उस आदेश का आउटपुट लें और वर्तमान शेल सत्र में इसे निष्पादित करें।

आप docker-machine env default खुद चलाते हैं, तो आपको लगता है कि यह बस कुछ वातावरण चर, जो की अनुमति देने के डोकर वीएम डोकर डेमॉन चल लगाने के लिए आदेश सेट करने के लिए पता चलता है देखेंगे। इन चर सेटों के बिना, डॉकर को पता नहीं है कि डॉकर डिमन के साथ संवाद कैसे करें।

सर्वर वातावरण (लिनक्स) में, आपको डॉकर मशीन की आवश्यकता नहीं होगी, क्योंकि लिनक्स कर्नेल मूल रूप से चलने वाले कंटेनरों का समर्थन करता है। ऑपरेटिंग सिस्टम पर आपको केवल डॉकर मशीन (एक छोटा वीएम एक लिनक्स कर्नेल चला रहा है) की आवश्यकता है जो चलने वाले कंटेनरों का मूल रूप से समर्थन नहीं करता है।

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