मैं सुडो के बिना डॉकर का उपयोग कैसे कर सकता हूं?

डॉकर के दस्तावेज़ीकरण पृष्ठों पर, सभी उदाहरण कमांड बिना दिखाए जाते हैं sudo, इस तरह एक:

docker ps

Ubuntu पर, द्विआधारी कहा जाता है docker.io. यह सूडो के बिना भी काम नहीं करता है:

sudo docker.io ps

मैं डॉकर को कैसे कॉन्फ़िगर कर सकता हूं ताकि मुझे सूडो के साथ हर डॉकर कमांड को उपसर्ग करने की आवश्यकता न हो?

अच्छी खबर: नया डॉकर (संस्करण 19.03 (वर्तमान में प्रयोगात्मक)) रूट उपयोगकर्ता का उपयोग करके होने वाली समस्याओं को नकारते हुए रूटलेस चलाने में सक्षम होगा । उन्नत अनुमतियों, रूट और कुछ भी जो आपकी मशीन को खोल सकता है जब आप नहीं चाहते थे, के साथ कोई और गड़बड़ नहीं ।

इस बारे में वीडियो से [डॉकरकॉन 2019] रूटलेस मोड के साथ हार्डनिंग डॉकर डेमन

रूटलेस डॉकर मोड के लिए कुछ चेतावनी

डॉकर इंजीनियरों का कहना है कि रूटलेस मोड को डॉकर इंजन सुविधाओं के पूर्ण सूट के लिए प्रतिस्थापन नहीं माना जा सकता है । रूटलेस मोड में कुछ सीमाओं में शामिल हैं:

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

डॉकर 19.3 के रूप में यह अप्रचलित है (और आवश्यकता से अधिक खतरनाक है):

डॉकर मैनुअल क्या इसके बारे में यह कहना है:

गैर-रूट पहुंच देना

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

संस्करण 0.5.3 में शुरू, यदि आप (या आपका डॉकर इंस्टॉलर) डॉकर नामक एक यूनिक्स समूह बनाते हैं और इसमें उपयोगकर्ताओं को जोड़ते हैं, तो डॉकर डेमॉन शुरू होने पर डॉकर समूह द्वारा यूनिक्स सॉकेट के स्वामित्व को पढ़ने/लिखने योग्य बना देगा । डॉकर डेमॉन को हमेशा रूट उपयोगकर्ता के रूप में चलाना चाहिए, लेकिन यदि आप डॉकर क्लाइंट को डॉकर समूह में उपयोगकर्ता के रूप में चलाते हैं तो आपको सभी क्लाइंट कमांड में सुडो जोड़ने की आवश्यकता नहीं है । 0.9.0 तक, आप यह निर्दिष्ट कर सकते हैं कि डॉकर के अलावा किसी अन्य समूह को-जी विकल्प के साथ यूनिक्स सॉकेट का मालिक होना चाहिए ।

चेतावनी: डॉकर समूह (या-जी के साथ निर्दिष्ट समूह) रूट-समतुल्य है; ले देख डॉकर डेमन अटैक सरफेस डिटेल्स और इस blogpost पर हम गैर-रूट उपयोगकर्ताओं को सेंटोस, फेडोरा, या आरएचईएल में डॉकर चलाने क्यों नहीं देते हैं (धन्यवाद माइकल-n).

की हालिया रिलीज में प्रयोगात्मक बिना जड़ मोड GitHub पर, इंजीनियरों ने रूटलेस मोड का उल्लेख किया है कि उपयोगकर्ता_नामस्पेस(7), माउंट_नामस्पेस(7), नेटवर्क_नामस्पेस(7) का उपयोग करके डॉकरड को एक अप्रशिक्षित उपयोगकर्ता के रूप में चलाने की अनुमति देता है ।

उपयोगकर्ताओं को चलाने की जरूरत है dockerd-rootless.sh डॉकरड के बजाय ।

$ dockerd-rootless.sh --experimental

चूंकि रूटलेस मोड प्रायोगिक है, इसलिए उपयोगकर्ताओं को हमेशा चलाने की आवश्यकता होती है dockerd-rootless.sh साथ-प्रयोगात्मक।


पढ़ने के लिए महत्वपूर्ण: लिनक्स के लिए पोस्ट-इंस्टॉलेशन चरण (यह भी लिंक करता है डॉकर डेमन अटैक सरफेस डिटेल्स).

डॉकर को गैर-रूट उपयोगकर्ता के रूप में प्रबंधित करें

डॉकर डेमॉन टीसीपी पोर्ट के बजाय यूनिक्स सॉकेट से बांधता है । डिफ़ॉल्ट रूप से यूनिक्स सॉकेट उपयोगकर्ता रूट के स्वामित्व में है और अन्य उपयोगकर्ता केवल सूडो का उपयोग करके इसे एक्सेस कर सकते हैं । डॉकर डेमॉन हमेशा रूट उपयोगकर्ता के रूप में चलता है ।

यदि आप डॉकर कमांड का उपयोग करते समय सुडो का उपयोग नहीं करना चाहते हैं, तो डॉकर नामक एक यूनिक्स समूह बनाएं और इसमें उपयोगकर्ताओं को जोड़ें । जब डॉकर डेमॉन शुरू होता है, तो यह डॉकर समूह द्वारा यूनिक्स सॉकेट को पढ़ने/लिखने योग्य बनाता है ।


  • डॉकर समूह जोड़ें यदि यह पहले से मौजूद नहीं है:

     sudo groupadd docker
  • जुड़े उपयोगकर्ता और उद्धरण जोड़ें;$उपयोगकर्ता और उद्धरण; डॉकर समूह में । यदि आप अपने वर्तमान उपयोगकर्ता का उपयोग नहीं करना चाहते हैं तो अपने पसंदीदा उपयोगकर्ता से मिलान करने के लिए उपयोगकर्ता नाम बदलें:

     sudo gpasswd -a $USER docker
  • या तो एक करो newgrp docker या समूहों में परिवर्तन को सक्रिय करने के लिए लॉग आउट/इन करें ।

  • आप उपयोग कर सकते हैं

     docker run hello-world

    यह जांचने के लिए कि क्या आप सूडो के बिना डॉकर चला सकते हैं ।

बिना डॉकर कमांड चलाने के लिए sudo, आपको अपने उपयोगकर्ता (जिनके पास रूट विशेषाधिकार हैं) को डॉकर समूह में जोड़ना होगा । इस रन निम्न आदेश के लिए:

 sudo usermod -aG docker $USER

अब, उपयोगकर्ता लॉगआउट करें और फिर से लॉगिन करें । यह समाधान अच्छी तरह से समझाया गया है यहाँ उचित स्थापना प्रक्रिया के साथ ।

वह तंत्र जिसके द्वारा उपयोगकर्ता को समूह में जोड़ना docker डॉकर को चलाने के लिए अनुदान की अनुमति डॉकर के सॉकेट तक पहुंच प्राप्त करना है /var/run/docker.sock. यदि फाइल सिस्टम जिसमें शामिल है /var/run एसीएलएस सक्षम के साथ मुहिम शुरू की गई है, यह एसीएलएस के माध्यम से भी हासिल की जा सकती है ।

sudo setfacl -m user:$USER:rw /var/run/docker.sock

मैं केवल पूर्णता के लिए इसे शामिल कर रहा हूं ।

सामान्य तौर पर, मैं एसीएल से बचने की सलाह देता हूं जब भी समूहों पर आधारित एक अच्छा विकल्प उपलब्ध होता है: यह बेहतर है कि किसी सिस्टम में विशेषाधिकारों को केवल समूह सदस्यता को देखकर समझा जा सके । सिस्टम विशेषाधिकारों को समझने के लिए एसीएल प्रविष्टियों के लिए फ़ाइल सिस्टम को स्कैन करना सुरक्षा ऑडिट के लिए एक अतिरिक्त बोझ है ।

चेतावनी 1: यह वही है root जोड़ने के रूप में समानता $USER को docker समूह। आप अभी भी एक कंटेनर को इस तरह से शुरू कर सकते हैं root होस्ट फाइल सिस्टम तक पहुंच ।

चेतावनी 2: समूह-आधारित सुरक्षा की तुलना में सुरक्षा ऑडिट के लिए एसीएल काफी कठिन हैं । यदि संभव हो तो एसीएल से बचें जब आप इसके बजाय समूहों का उपयोग कर सकते हैं, कम से कम ऑडिट-प्रासंगिक वातावरण में ।

डॉकर समूह बनाने और इसके साथ मेरे उपयोगकर्ता को जोड़ने के बाद

sudo groupadd dockersudo usermod -aG docker $USER

... मुझे अभी भी देना था /var/run/docker.sock सॉकेट और /var/run/docker इसे काम करने के लिए उचित अनुमतियों को निर्देशिका दें:

sudo chown root:docker /var/run/docker.socksudo chown -R root:docker /var/run/docker

लॉगआउट करें और फिर से लॉगिन करें (उस उपयोगकर्ता के साथ) फिर आप बिना डॉकर कमांड चला पाएंगे sudo:

docker run hello-world

डॉकर कंटेनरों को रूट उपयोगकर्ता द्वारा चलाया जाना चाहिए । आप खुद को इसमें जोड़ सकते हैं docker समूह (जैसे चल रहा है sudo usermod -aG docker $USER), लेकिन यह किसी के लिए भी आसान बनाता है $USER मशीन तक रूट एक्सेस प्राप्त करने के लिए खाता (उदाहरण के लिए एक विशेषाधिकार प्राप्त कंटेनर में रूट वॉल्यूम बढ़ाकर) ।

एक और अधिक सुरक्षा के प्रति सजग तरीके से चलाने की गोदी श्रमिक कंटेनर के रूप में एक गैर-रूट उपयोक्ता के लिए किया जाएगा का उपयोग करने के लिए Podman: https://podman.io/. अपनी वेबसाइट से:

पॉडमैन आपके लिनक्स सिस्टम पर ओसीआई कंटेनरों को विकसित करने, प्रबंधित करने और चलाने के लिए एक डेमोनलेस कंटेनर इंजन है । कंटेनरों को या तो रूट के रूप में या अंदर चलाया जा सकता है रूटलेस मोड. सीधे शब्दों में कहें: alias docker=podman.

एक अन्य विकल्प विलक्षणता है, जो आमतौर पर एचपीसी वातावरण में तैनात है: https://sylabs.io/.

कैसे एक उपनाम के बारे में:? इस तरह, आप अभी भी पासवर्ड सुरक्षा के साथ सूडो का उपयोग करते हैं । उपनाम डोकर="sudo डोकर "

यूएफडब्ल्यू को सक्षम करना न भूलें :wink:

उबंटू 14.04 पर [वहाँ है] (Ubuntu – Error) इसके अलावा’ डॉकर ’ बाइनरी ।

अनुशंसित स्थापना डिफ़ॉल्ट उबंटू रेपो में डॉकर है; इसके बजाय, यहां निर्देश ( Redirecting…), डॉकर रेपो का उपयोग करने की सलाह दें । सभी मौजूदा डॉकर सामान निकालें, और सत्यापित करें कि आपको सही स्रोत से एक मिल रहा है: उपयुक्त-कैश पॉलिसी डॉकर-इंजन (उपयुक्त यूआरएल से होना चाहिए dockerproject.org)

डॉकर जानकारीजैसी साधारण चीजों को करने के लिए रूट की आवश्यकता के लिए यह क्या जंक है । जैसे ‘डॉकर जानकारी’ को चलाने के लिए मेरी सभी फ़ाइल और उपकरणों और बंदरगाहों तक कच्ची पहुंच की आवश्यकता होती है ।

@ अनातोलीटटोनिक मैंने ‘डॉकर’ के बजाय ‘डॉकर’ का भी इस्तेमाल किया docker.io ’ उबंटू 14.04 एलटीएस में

हाँ, जब तक डॉकर पॉलिसीकिट या कुछ इसी तरह लागू नहीं करता है, मैं दृढ़ता से एक उपनाम का उपयोग करने की सलाह देता हूं, अन्यथा आप बस रूट के रूप में सब कुछ चला सकते हैं ।

sudo chmod 666 /var/रन/गोदी श्रमिक.सॉक