आर्केन वीकली में आपका स्वागत है। आज, मैं आपसे एक ऐसी समस्या के बारे में बात करना चाहता हूं जिसका सामना आप करने की संभावना नहीं रखते, लेकिन यदि आप करते हैं, तो आप एक त्वरित और आसान समाधान चाहेंगे। हाथ में उपकरण: LXD कंटेनर, डॉकर। हाथ में मिशन: आप दोनों को एक ही समय में चलाना चाहते हैं। अधिक विशेष रूप से, आप एक LXD कंटेनर स्पॉन करना चाहते हैं, और फिर उसके अंदर, एक डॉकर कंटेनर शुरू करना चाहते हैं। क्यों? क्यों नहीं।
फिर, आपको जो समस्या है वह इस प्रकार है। डॉकर निष्पादन निम्नलिखित त्रुटि के साथ विफल होता है: docker: Error response from daemon: OCI runtime create failed: container_linux.go:367: starting container process caused: process_linux.go:495: container init caused: rootfs_linux.go:60: mounting "proc" to rootfs at "/proc" caused: permission denied: unknown. वहां बहुत सारा टेक्स्ट है। आइए इसे डीबग करें, क्या हम?
समस्या का विस्तार
आम तौर पर, जब आप डॉकर कंटेनर चलाते हैं, तो आपको /proc तक पहुंचने में कोई समस्या नहीं होनी चाहिए। लेकिन उपरोक्त त्रुटि हमें बताती है कि यह संभव नहीं है। यह एक बल्कि भ्रमित करने वाला संदेश है, क्योंकि इसमें बहुत सारी जानकारी है, जो एक भ्रामक निशान बनाती है। सच है, आपके द्वारा इस समस्या का सामना करने के कारण टन हो सकते हैं। मेरे मामले में, सेटअप बिल्कुल नया, वेनिला था, बिना किसी पागल अनुकूलन के। कोई अन्य त्रुटि नहीं थी, और सभी व्यावहारिक उद्देश्यों के लिए, डॉकर को सही ढंग से इंस्टॉल और कॉन्फ़िगर किया गया था।
तब मैंने सोचा, मैं देखना चाहूंगा कि LXD चीजें कैसे करता है, और शायद यह मुझे इस बात की बेहतर समझ दे सकता है कि मैं यह समस्या क्यों देख रहा था। वास्तव में, मुझे जल्द ही LXD के बारे में एक पुराना, अर्ध-दस्तावेजीकृत लेख मिला, जो स्थिति की व्याख्या करता है। सुरक्षा कारणों से, कंटेनरों को /proc और /sys तक असुरक्षित तरीकों से पहुंचने की अनुमति नहीं है। इसके लिए एक समाधान - प्रासंगिक सुरक्षा निहितार्थों के साथ - ऐसी पहुंच की अनुमति देना है।
समाधान
आपको प्रभावित कंटेनर के लिए नेस्टिंग की अनुमति देने की आवश्यकता है।
lxc launch "image" "container name" -c security.nesting=true
यदि कंटेनर मौजूद है, तो इसे शुरू करने से पहले:
lxc config set "container name" security.nesting true
और फिर कंटेनर शुरू करें:
lxc start "container name"
यदि यह पहले से चल रहा है, तो कंटेनर को रोकें, नीति सेट करें, फिर इसे फिर से शुरू करें। ऑपरेशन गैर-विनाशकारी है, इसलिए यदि आपको समस्या का सामना केवल कंटेनर को स्पॉन करने के बाद होता है, तो आप इसके अंदर किसी भी काम या डेटा को नहीं खोएंगे। सेटिंग पूरी तरह से प्रतिवर्ती भी है। और हमारा काम यहां हो गया, दोस्तों।
निष्कर्ष
यह देखना दिलचस्प है कि मैंने केवल अब एक ऐसे मुद्दे का सामना किया है जो लगभग पांच साल से मौजूद है। या कि इतने सारे लोग इस समस्या का सामना कर रहे हैं, और फिर भी, जानकारी दुर्लभ और बिखरी हुई है। खैर, यदि आप नेस्टेड कंटेनरों के लिए जा रहे हैं, तो आप LXD में प्रभावित कंटेनरों के लिए सुरक्षा नीति संपादित करना चाहते हैं। यह एक अपेक्षाकृत सरल ट्रिक है। इसमें और भी बहुत कुछ है, जैसे विशेषाधिकार प्राप्त और गैर-विशेषाधिकार प्राप्त कंटेनरों की अवधारणाएं, और अन्य सुरक्षा विचार। लेकिन अगर आपका काम सुरक्षा के बारे में नहीं है, तो इस बदलाव का कोई नुकसान नहीं है।
बेहतर दस्तावेज़ीकरण मदद करेगा। कम गूढ़ त्रुटि संदेश भी। इस बीच, यह सोचने की कोशिश करें कि आपके सेटअप में, जो आप करने की कोशिश कर रहे हैं, उसके लिए अनुमति त्रुटियां क्यों हो सकती हैं, और यह आपको सही दिशा में ले जाना चाहिए। एक बार जब आप जानते हैं कि समस्या कथन को कैसे फ्रेम करना है, तो आप 80% काम कर चुके हैं। अब आप कंटेनरों के भीतर कंटेनर कर सकते हैं, पूरा: Yo Dawn, I herd u like containers, so we put containers in your containers ... Inception. बोनस: यह देखने की कोशिश करें कि ब्रह्मांड के फटने से पहले आप कितने स्तरों की नेस्टिंग कर सकते हैं।
Cheers.