डॉकटर में, कंटेनरों के अंदर बनाई गई फाइलें होस्ट से निरीक्षण करते समय अप्रत्याशित स्वामित्व रखती हैं। वॉल्यूम पर फ़ाइलों का स्वामी डिफ़ॉल्ट रूप से रूट (uid 0) है, लेकिन जैसे ही गैर-रूट उपयोगकर्ता खाते कंटेनर में शामिल होते हैं और फ़ाइल सिस्टम पर लिखते हैं, मालिक होस्ट के परिप्रेक्ष्य से कम या ज्यादा यादृच्छिक हो जाते हैं।
यह एक समस्या है जब आपको होस्ट से वॉल्यूम डेटा को उसी उपयोगकर्ता खाते का उपयोग करने की आवश्यकता होती है जो डॉक कमांड को कॉल कर रहा है।
विशिष्ट कार्यपत्रक होते हैं
- Dockerfiles (गैर पोर्टेबल) में निर्माण समय पर उपयोगकर्ताओं को मजबूर करना
- होस्ट उपयोगकर्ता के UID को
docker runकमांड को एक पर्यावरण चर के रूप में पास करना और फिरchownएक एंट्रीपॉइंट स्क्रिप्ट में वॉल्यूम पर कुछ कमांड चलाना ।
ये दोनों समाधान कंटेनर के बाहर वास्तविक अनुमतियों पर कुछ नियंत्रण दे सकते हैं।
मुझे उम्मीद थी कि यूजर नेमस्पेस इस समस्या का अंतिम समाधान होगा। मैंने हाल ही में जारी संस्करण 1.10 और --userns-remap के साथ अपने डेस्कटॉप खाते में कुछ परीक्षण चलाए हैं। हालांकि, मुझे यकीन नहीं है कि इससे निपटने के लिए माउंटेड वॉल्यूम पर फ़ाइल का स्वामित्व आसान हो सकता है, मुझे डर है कि यह वास्तव में विपरीत हो सकता है।
मान लीजिए मैं इस बुनियादी कंटेनर को शुरू करता हूं
docker run -ti -v /data debian:jessie /bin/bash
echo 'hello' > /data/test.txt
exit
और फिर मेजबान से सामग्री का निरीक्षण करें:
ls -lh /var/lib/docker/100000.100000/volumes/<some-id>/_data/
-rw-r--r-- 1 100000 100000 6 Feb 8 19:43 test.txt
यह संख्या '100000' मेरे होस्ट उपयोगकर्ता का एक उप-यूआईडी है, लेकिन चूंकि यह मेरे उपयोगकर्ता के यूआईडी के अनुरूप नहीं है, इसलिए मैं अभी भी विशेषाधिकारों के बिना test.txt को संपादित नहीं कर सकता। इस उप-उपयोगकर्ता को मेरे वास्तविक नियमित उपयोगकर्ता के साथ डॉकटर के बाहर कोई संबंध नहीं लगता है। यह वापस मैप नहीं है।
इस पोस्ट में पहले बताए गए वर्कअराउंड शामिल हैं, जिसमें होस्ट और कंटेनर के बीच यूआईडी को संरेखित करना शामिल है UID->sub-UIDजो नामस्थान में होने वाली मैपिंग के कारण अब काम नहीं करता है।
फिर, क्या उपयोगकर्ता नेमस्पेस सक्षम (बेहतर सुरक्षा के लिए) के साथ डॉक चलाने का एक तरीका है, जबकि अभी भी वॉल्यूम पर उत्पन्न फ़ाइलों को चलाने के लिए होस्ट उपयोगकर्ता के लिए डॉक चलाने के लिए संभव है?