जब डेमॉन चल रहा है तो मुझे "डॉकटर डेमन से कनेक्ट नहीं किया जा रहा है" क्यों हो रहा है?


29

डॉकर सेवा स्पष्ट रूप से चल रही है:

$ systemctl status docker.service 
● docker.service - Docker Application Container Engine
   Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; vendor preset: disabled)
   Active: active (running) since Mon 2015-12-28 19:20:50 GMT; 3 days ago
     Docs: https://docs.docker.com
 Main PID: 1015 (docker)
   CGroup: /system.slice/docker.service
           └─1015 /usr/bin/docker daemon -H fd:// --exec-opt native.cgroupdriver=cgroupfs
$ ps wuf -u root | grep $(which docker)
root      1015  0.0  0.3 477048 12432 ?        Ssl   2015   2:26 /usr/bin/docker daemon -H fd:// --exec-opt native.cgroupdriver=cgroupfs

हालाँकि, डॉकर ने खुद इस पर बात करने से इंकार कर दिया:

$ docker info
Cannot connect to the Docker daemon. Is the docker daemon running on this host?

मैं डिफ़ॉल्ट डॉकर कॉन्फ़िगरेशन चला रहा हूं , अर्थात, मैंने /etcइस सेवा से संबंधित कोई भी फाइल नहीं बदली है ।

यहां क्या समस्या हो सकती थी?

जवाबों:


36

आपको अपने आप को dockerसमूह में जोड़ना होगा और समूह newgrp dockerको चलाने के लिए और dockerकमांड को चलाने के लिए (फिर से या फिर लॉग आउट करके ) सक्रिय करना होगा । त्रुटि संदेश केवल भ्रामक है।


1
वास्तव में भ्रामक नहीं है। यह डॉकटर डेमॉन से जुड़ नहीं सका । "डेमन चल रहा है?" बस एक अनुमान था।
ब्राचली

2
sudo gpasswd -a alex docker
एलेक्स पुन्नेन

1
sudo gpasswd -a $ USER docker # किसी भी उपयोगकर्ता नाम के लिए काम करता है
priomsrb

मैंने यह किया और यह अभी भी काम नहीं किया। रनिंग ने sudo systemctl start dockerइसे ठीक कर दिया, डेमन वास्तव में नहीं चल रहा था ...
nakamin

32

इस सवाल का जवाब पहले ही दिया जा चुका है, लेकिन यहां जानकारी का एक अतिरिक्त टुकड़ा है।

कोई फर्क नहीं पड़ता कि आप आर्क पर हैं या फेडोरा या उबंटू जैसे अन्य वितरण पर, डॉकर संचार करने के लिए सॉकेट फ़ाइल का उपयोग करता है। जब आप 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समूह में होना चाहिए ।)


1
यह मूल प्रश्न का उत्तर नहीं लगता है।
l0b0

4
@ l0b0: खैर, मैं यह बताना चाहता था कि ऐसा क्यों हो रहा है, उम्मीद है कि यह किसी के लिए उपयोगी होगा। उपयोगकर्ता को समूह में जोड़ने वाला usermod कमांड उत्तर के मध्य भाग में छिपा होता है। यदि आपको यह उत्तर उपयोगी नहीं लगता है, तो मुझे बताएं ताकि मैं इसे हटा सकूं।
बेसिक 6

4
हाँ, यह आर्क के समाधान का उत्तर और व्याख्या करता है।
कोडेअर्ट

मैंने यह सब किया है, और मैं अभी भी ओपी द्वारा उल्लिखित मुद्दे का सामना कर रहा हूं। अनुमति संबंधी किसी भी कदम से समस्या का समाधान नहीं हुआ है।
mopsyd

3

sudo usermod -aG docker [उपयोगकर्ता नाम]

फिर लॉगआउट करें फिर लॉग इन करें


1

अपने लिनक्स सिस्टम पर इस समस्या को हल करने में कुछ शोध करने के बाद मैंने सोचा कि मैं यह उत्तर लिखूंगा। यहाँ मैंने समस्या को ठीक करने के लिए क्या किया।

फेडोरा 22 पर

डॉकर स्थापित करना:

$> curl -fsSL https://get.docker.com/ | sh

डॉकर स्थापित करने के बाद:

उपयोगकर्ता को डॉकटर समूह में जोड़ने की आवश्यकता है।

$> sudo usermod -aG docker

डॉकटर डेमॉन को शुरू करने की जरूरत है

$> sudo service docker start

आप बूट पर शुरू करने के लिए डेमन सेट कर सकते हैं

$> sudo chkconfig docker on

आप सत्यापित कर सकते हैं कि docker सेवा चल रही है

$> service docker status

और एक अंतिम अंतिम जांच

$> docker run hello-world

एक पूर्ण उदाहरण के लिए +1, हालांकि इनमें से कई कमांड मेरी स्थिति पर लागू नहीं होते हैं ( + के बजाय का pacmanउपयोग करके , उपयोग करके )। systemctlservicechkconfig
l0b0

1

यदि आप Fedora 23 या Redhat संस्करण का उपयोग कर रहे हैं /etc/sysconfig/dockerऔर निम्नलिखित को संशोधित करें

OPTIONS='--selinux-enabled --log-driver=journald -G yourdockergroup'

कर्ता को पुनः स्थापित करें।

सुनिश्चित करें कि आप इस समूह को सिस्टम में जोड़ते हैं और समूह में खुद को जोड़ते हैं।


1

यह आज्ञा मेरे लिए काम करती है

sudo grep dwalsh /etc/sudoers

alias docker="sudo /usr/bin/docker"

यदि आपको अधिक दस्तावेज़ीकरण की आवश्यकता हो तो मुझे इस पृष्ठ में समाधान मिला। हम गैर-रूट उपयोगकर्ताओं को CentOS, Fedora या RHEL में Docker चलाने की अनुमति क्यों नहीं देते हैं


1

यदि आपने अपना डॉक इंजन इंजन के साथ शुरू किया है: sudo service docker start

यदि आप स्वयं को 'docker' समूह में जोड़ चुके हैं तो भी आप सामान्य उपयोगकर्ता से नहीं जुड़ सकते हैं।

आप बस इसे रोक सकते हैं: sudo service docker stop

और इसे एक सामान्य उपयोगकर्ता के रूप में शुरू करें: सेवा करने वाले प्रारंभ करें


मुझे docker groupअब तक उपयोगकर्ता को जोड़ना नहीं था । sudo service startमेरे लिए काम किया। HOwever, निरीक्षण करेंगे अगर कुछ नया है।
बेवकूफ

0

मेरा भी यही मुद्दा था। समस्या डॉक-डेमॉन और डॉक-क्लाइंट को आवंटित सॉकेट्स में थी।

  1. पहले, docker.sock पर docker-client के लिए अनुमति सेट नहीं की गई थी। आप इसका उपयोग करके सेट कर सकते हैं sudo usermod -aG docker $USER

  2. फिर अपनी बैश फ़ाइल की जाँच करें जहाँ docker- क्लाइंट चल रहा है। मेरे लिए यह 0.0.0.0:2375 पर सेट किया गया था, जबकि डॉक-डेमॉन यूनिक्स सॉकेट पर चल रहा था। (यह डॉकडर की कॉन्फ़िगरेशन फ़ाइल में सेट किया गया था)।

  3. बस आपत्तिजनक लाइन पर टिप्पणी करें और यह ठीक काम करेगा।

  4. लेकिन अगर आप इसे यूनिक्स सॉकेट के बजाय टीसीपी पोर्ट पर काम करना चाहते हैं, तो डॉकर्ड की कॉन्फ़िगरेशन फ़ाइल को बदलें, इसे 0.0.0.0.2375 पर सेट करें, और लाइन को बैश में रखें क्योंकि यह मौजूद है या इसे 0.0 पर सेट करें। 0.0: 2375।


0

निम्नलिखित चरणों को ठीक करने के लिए मैंने ये कदम उठाए हैं

$ docker info
Cannot connect to the Docker daemon at 
tcp://localhost:2375/usr/lib/systemd/system/docker.socket. Is the docker daemon running?
  1. अपने आप को docker group में जोड़ें

    usermod -aG docker $USER

  2. Docker socker और कमांड पर अनुमतियाँ ठीक करें।

    sudo chgrp docker /usr/bin/docker
    sudo chgrp docker /var/run/docker.sock

    $ ll $(which docker) -rwxr-xr-x 1 root docker 18991768 08.07.2017 22:57 /usr/bin/docker*

    $ ll /var/run/docker.sock srw-rw---- 1 root docker 0 23.07.2017 10:21 /var/run/docker.sock

  3. डॉक कमांड के लिए पर्यावरण को कॉन्फ़िगर करने के लिए चर जोड़ें

    export DOCKER_HOST=unix:///var/run/docker.sock

  4. बाकी डॉकटर

    sudo systemctl restart docker

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.