इस सवाल का जवाब पहले ही दिया जा चुका है, लेकिन यहां जानकारी का एक अतिरिक्त टुकड़ा है।
कोई फर्क नहीं पड़ता कि आप आर्क पर हैं या फेडोरा या उबंटू जैसे अन्य वितरण पर, डॉकर संचार करने के लिए सॉकेट फ़ाइल का उपयोग करता है। जब आप docker
कमांड चलाते हैं , तो यह डॉकटर डेमन से बात करने के लिए इस सॉकेट का उपयोग करता है। बेशक, डेमॉन चल रहा होगा (और यह अक्सर डिफ़ॉल्ट रूप से अक्षम होता है), लेकिन यदि आपका उपयोगकर्ता सॉकेट तक नहीं पहुंच सकता है, तो यह डेमॉन के साथ संवाद करने में सक्षम नहीं होगा।
आप सबसे पहले वितरण की रिपॉजिटरी से डॉकर को इंस्टॉल करेंगे। कुछ लोग एक इंस्टॉल स्क्रिप्ट डाउनलोड करते हैं और इसे एक शेल ( curl ... | sh
) में पाइप करते हैं , लेकिन इसे रिपॉजिटरी से इंस्टॉल करने की सिफारिश की जाती है ताकि इसे आसानी से अपडेट किया जा सके।
आर्क:
# pacman -S docker
फेडोरा:
# dnf install docker
जैसा कि ऊपर उल्लेख किया गया है, डेमन डिफ़ॉल्ट रूप से अक्षम हो सकता है। यदि आप डॉकर का उपयोग करना चाहते हैं, तो डेमॉन को चलना होगा।
इसे सक्षम करें (इसलिए इसे बूट पर शुरू किया जाएगा):
# systemctl enable docker
इसे अभी शुरू करें (या रिबूट करें):
# systemctl start docker
अब, डिफ़ॉल्ट रूप से (यदि डॉकटर समूह गायब है), डॉकर सॉकेट का स्वामित्व मूल है:
# ls -la /var/run/docker.sock
srw-rw---- 1 root root 0 Apr 28 17:22 /var/run/docker.sock
यही कारण है कि एक नियमित उपयोगकर्ता docker daemon से बात करने में सक्षम नहीं है। एक नियमित उपयोगकर्ता के पास सॉकेट तक पहुँचने के लिए पर्याप्त अनुमति नहीं है। यह डेमॉन तक पहुंचने में सक्षम नहीं है, इसलिए यह मानता है कि यह नहीं चल रहा है और इस त्रुटि को दिखाता है:Cannot connect to the Docker daemon. Is the docker daemon running on this host?
यही कारण है कि बहुत से लोग बस सभी डोकर कमांड को रूट के रूप में शुरू करते हैं, उपयोग करते हुए sudo
। लेकिन जैसा कि अन्य उत्तर में वर्णित है, डॉकटर के पास इसके लिए अपना तंत्र है, इसलिए सुडो का उपयोग करना आवश्यक नहीं है।
आदर्श रूप से, docker
डॉकर को स्थापित करते समय एक समूह बनाया जाता है। हालाँकि, यदि डेमन शुरू होने पर वह समूह मौजूद नहीं है, तो सॉकेट फ़ाइल रूट के स्वामित्व में है।
कुछ मामलों में, उस समूह का एक अलग नाम हुआ करता था, जैसे dockerroot
फेडोरा पर । grep docker /etc/group
यह देखने के लिए जांचें कि क्या आपके सिस्टम पर ऐसा कोई समूह है। यदि आप पहले से ही उस समूह का उपयोग कर रहे हैं (आपका उपयोगकर्ता इसमें है), तो आपको इसका उपयोग करने के लिए डॉकर को कॉन्फ़िगर करना होगा:
में /etc/sysconfig/docker
, जोड़ें -G dockerroot
(ध्यान दें: यह एक समाधान है, सबसे अच्छा समाधान नहीं):
OPTIONS='--selinux-enabled -G dockerroot'
डेमॉन को पुनरारंभ करने के बाद, आपका उपयोगकर्ता सॉकेट तक पहुंचने में सक्षम होगा:
# systemctl restart docker
# ls -la /var/run/docker.sock
srw-rw---- 1 root dockerroot 0 Apr 28 17:32 /var/run/docker.sock
अन्यथा, आधिकारिक तरीका समूह नामक समूह का उपयोग करना होगा docker
। यदि यह मौजूद है, तो डॉकर स्वचालित रूप से इसका उपयोग करेगा, अर्थात सॉकेट के समूह को उस समूह में सेट करेगा। यदि यह मौजूद नहीं है, तो आपको बस इतना करना होगा कि इसे बनाएं और डेमॉन को पुनरारंभ करें:
# groupadd docker
# systemctl restart docker
सॉकेट फ़ाइल उस समूह के स्वामित्व में होगी:
# srw-rw---- 1 root docker 0 Apr 28 17:42 /var/run/docker.sock
आपका उपयोगकर्ता docker
सॉकेट तक पहुंचने में सक्षम होने के लिए समूह में होना चाहिए :
# usermod -aG docker (user)
यदि आप समूह में हैं, तो आपको लॉग आउट करना होगा और फिर से (या su - (user)
) वापस लॉग इन करना होगा id
।
इसके बाद आप बिना सूडो / रूट के डॉकर का उपयोग कर सकते हैं:
$ docker version --format '{{.Server.Version}}'
1.9.1
अंत में, चेतावनी का एक शब्द। केवल विश्वसनीय उपयोगकर्ताओं को आपके डॉकर डेमन को नियंत्रित करने की अनुमति दी जानी चाहिए । Https://docs.docker.com/engine/security/security/ देखें ।
(लेकिन ज़ाहिर है, वही सूडो के लिए सच है - केवल विश्वसनीय उपयोगकर्ताओं को wheel
समूह में होना चाहिए ।)