2015-12-14 29 views
8

मैं एक चलने वाले डॉकर कंटेनर के अंदर डॉकर इंस्टॉल करना चाहता हूं।डॉकर कंटेनर के अंदर डॉकर

docker run -it centos:centos7 

मेरे आधार कंटेनर centos उपयोग कर रहा है, मैं docker exec का उपयोग कर कंटेनर चलाने के लिए के लिए लॉग इन कर सकते हैं। लेकिन जब मैं yum install -y docker का उपयोग कर इसके अंदर डॉकर इंस्टॉल करने का प्रयास करता हूं तो यह इंस्टॉल हो जाता है।

लेकिन किसी भी तरह मैं docker -d & साथ डोकर सेवा प्रारंभ नहीं कर सकते हैं, यह मेरे रूप में त्रुटि देता है:

INFO[0000] Option DefaultNetwork: bridge 
WARN[0000] Running modprobe bridge nf_nat br_netfilter failed with message: , error: exit status 1 
FATA[0000] Error starting daemon: Error initializing network controller: Error initializing bridge driver: Setup IP forwarding failed: open /proc/sys/net/ipv4/ip_forward: read-only file system 

वहाँ एक रास्ता मैं डोकर कंटेनर के अंदर डोकर स्थापित करने या छवि का निर्माण पहले से ही चल रहा है डोकर होने कर सकता है? मैंने पहले से ही these उदाहरण देखे हैं लेकिन कोई भी मेरे लिए काम नहीं करता है।

होस्ट मशीन पर uname -r के उत्पादन:

[[email protected] ~]$ uname -r 
4.2.6-200.fc22.x86_64 

किसी भी मदद की सराहना की जाएगी।

अग्रिम धन्यवाद

+0

क्या आप अपने बेस-एंड-डॉकर कंटेनर को शुरू करने के लिए उपयोग किए गए पूरे आदेश प्रदान कर सकते हैं? आपके द्वारा पारित तर्कों में कुछ गड़बड़ हो सकती है। – michaelbahr

+0

हाय माइकलबार, नीचे मैंने जो कोशिश की है, वह नीचे है: डॉकर रन -ट सेंटोस: सेंटोस 7 बैश केंद्रों के अंदर डॉकर इंस्टॉल करें: – priyank

+1

कृपया आदेशों के साथ अपना प्रश्न बढ़ाएं (संपादित करें)। – michaelbahr

उत्तर

1

में आप --privileged पैरामीटर की जरूरत है।

By default, Docker containers are “unprivileged” and cannot, for example, run a Docker daemon inside a Docker container.

Source

आदेश docker run --privileged -it centos:centos7 bash के साथ अपने आधार छवि चलाएँ। फिर आप उस कंटेनर के अंदर एक और डॉकर कंटेनर स्थापित और चला सकते हैं।

+0

हे धन्यवाद त्वरित प्रतिक्रिया के लिए, मैं tr "--privilaged" के साथ ied, जब मैं सेंटोस 7 कंटेनर के अंदर डॉकर डिमन चलाता हूं, तो मैं नीचे आता हूं: कोई विचार – priyank

+0

INFO [0000] यूनिक्स (/var/run/docker.sock) पर HTTP के लिए सुनना चेतावनी [0000] यूडीवी सिंक समर्थित नहीं है। यह अप्रत्याशित व्यवहार, डेटा हानि और त्रुटियों का कारण बन जाएगा। अधिक जानकारी के लिए, https://docs.docker.com/reference/commandline/cli/#daemon-storage-driver-option ईआरआरओ [0000] चेतावनी: नहीं - स्टोरेज-ऑप्ट dm.thinpooldev निर्दिष्ट है, लूपबैक का उपयोग करके; यह कॉन्फ़िगरेशन उत्पादन उपयोग ईआरआरओ [0000] [ग्राफ़्रिवर] पूर्व स्टोरेज ड्राइवर "devicemapper" विफल होने के लिए दृढ़ता से निराश है: exec: "mkfs.ext4": निष्पादन योग्य फ़ाइल $ PATH – priyank

+1

में नहीं मिली है, नहीं, आप ** आधार ** '- निजीकृत' के साथ डॉकर कंटेनर। अंदरूनी कंटेनर पैरामीटर के बिना शुरू किया गया है। कृपया हमेशा आपके द्वारा निष्पादित किए गए पूरे आदेश प्रदान करें। – michaelbahr

7

अद्यतन

https://stackoverflow.com/a/38016704/372019 के लिए धन्यवाद मैं एक और दृष्टिकोण दिखाना चाहते हैं।

होस्ट की docker बाइनरी को घुमाने के बजाय, आपको docker बाइनरी के कंटेनर विशिष्ट रिलीज़ को कॉपी या इंस्टॉल करना चाहिए। चूंकि आप इसे केवल क्लाइंट मोड में उपयोग कर रहे हैं, इसलिए आपको इसे सिस्टम सेवा के रूप में स्थापित करने की आवश्यकता नहीं होगी। आपको अभी भी डॉकर सॉकेट को कंटेनर में घुमाने की आवश्यकता है ताकि आप मेजबान के डॉकर इंजन से आसानी से संवाद कर सकें।

यह मानते हुए कि आप एक काम कर डोकर बाइनरी के साथ एक आधार छवि (जैसे official docker image) मिल गया है, उदाहरण के लिए अब इस तरह दिखता है:

docker run\ -v /var/run/docker.sock:/var/run/docker.sock\ docker:1.12 docker info


वास्तव में अपने प्रश्न मैं सुझाव देंगे जवाब देने के बिना आप Using Docker-in-Docker for your CI or testing environment? Think twice पढ़ने के लिए।

यह बताता है कि क्यों चलने वाले डॉकर-इन-डॉकर को एक सेटअप के साथ प्रतिस्थापित किया जाना चाहिए जहां डॉकर कंटेनर "बाहरी" या "बेस" कंटेनर के भाई बहन के रूप में चलते हैं। यह आलेख मूल https://github.com/jpetazzo/dind प्रोजेक्ट से भी लिंक है जहां आप डॉकर इन डॉकर को चलाने के लिए काम करने वाले उदाहरणों को कैसे देख सकते हैं - यदि आप अभी भी डॉकर-इन-डॉकर चाहते हैं।

एक उदाहरण है कि कैसे इस तरह मेजबान के डोकर डेमॉन नज़र तक पहुँचने के लिए एक कंटेनर सक्षम करने के लिए:

docker run\ 
    -v /var/run/docker.sock:/var/run/docker.sock\ 
    -v /usr/bin/docker:/usr/bin/docker\ 
    busybox:latest /usr/bin/docker info 
2

आप डोकर टूलबॉक्स के साथ मैक पर हैं।

नीचे आदेश से कार्य करेगी

docker run\ 
    -v /var/run/docker.sock:/var/run/docker.sock\ 
    -v /usr/bin/docker:/usr/bin/docker\ 
    busybox:latest /usr/bin/docker info 

/var/run/docker.sock क्योंकि

डोकर डेमॉन boot2docker वी एम के अंदर चल रहा है अपने OSX फाइल सिस्टम पर नहीं होगा - और निश्चित ही यूनिक्स सॉकेट है ।

तो तुम वीएम

$ docker-machine ssh default 
$ docker run\ 
     -v /var/run/docker.sock:/var/run/docker.sock\ 
     -v $(which docker):/usr/bin/docker\ 
     busybox:latest /usr/bin/docker info 
$ exit 

यह डोकर में डोकर की तरह लग रहा boot2docker से कंटेनर को चलाने के लिए है, डोकर में डोकर की तरह लगता है, लेकिन यह डोकर-डोकर में, जब इस कंटेनर नहीं कर रहा है अधिक कंटेनर बनाएगा, उन कंटेनरों को शीर्ष-स्तरीय डॉकर में बनाया जाएगा।

+0

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

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