डॉकटर को कैसे ठीक करें: अनुमति से इनकार कर दिया मुद्दा


305

मैंने अपनी मशीन में डॉकर स्थापित किया जहां मेरे पास उबंटू ओएस है। जब मैं चला, तब से मैंने डॉकटर स्थापित किया

sudo docker run hello-world

यह सब ठीक है, लेकिन मैं sudoकमांड को कम करने के लिए शब्द को छिपाना चाहता हूं ।

अगर मैं शब्द के बिना कमांड लिखता हूं sudo

docker run hello-world

वह निम्नलिखित प्रदर्शित करता है:

docker: Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Post http://%2Fvar%2Frun%2Fdocker.sock/v1.35/containers/create: dial unix /var/run/docker.sock: connect: permission denied.See 'docker run --help'.

जब मैंने बनाने की कोशिश की तो ऐसा ही हुआ

docker-compose up

मैं इसे कैसे हल करूं?



जवाबों:


442

यदि आप docker को नॉन-रूट उपयोगकर्ता के रूप में चलाना चाहते हैं, तो आपको इसे docker समूह में जोड़ने की आवश्यकता है।

  1. यदि यह मौजूद नहीं है, तो docker समूह बनाएँ
$ sudo groupadd docker
  1. अपने उपयोगकर्ता को docker समूह में जोड़ें।
$ sudo usermod -aG docker $USER
  1. निम्नलिखित कमांड या लॉगआउट चलाएं और फिर से लॉगिन करें और चलाएं (जो आपके काम करने की जरूरत नहीं है, पहले अपनी मशीन को रिबूट करें)
$ newgrp docker
  1. जांचें कि क्या डॉक को रूट के बिना चलाया जा सकता है
$ docker run hello-world

Docker आधिकारिक दस्तावेज से लिया गया: प्रबंधन-docker-as-a-non-root-user


70
मेरे पास तीनों चरणों को निष्पादित करने के बाद भी यह मुद्दा है "(
आनंद

78
मुझे काम करने के लिए उबंटू 18 पर रिबूट करना पड़ा - बस लॉगिंग करना और काम नहीं करने पर लॉग इन करना।
हेज

26
@ शायद रिबूट की आवश्यकता नहीं हो सकती है, पुनः आरंभ करने वाला मेरे लिए पर्याप्त था। sudo systemctl restart docker
रैटल

5
कृपया ध्यान दें कि dockerसमूह में होने से मूल रूप से रूट एक्सेस प्राप्त होता है , बिना नियमित सूडो नीतियों और ऑडिटिंग के। विवरण और चर्चा के लिए GitHub मुद्दा # 9976 देखें।
राहीक

13
पुनः आरंभ करने वाले ने मेरे लिए काम नहीं किया, केवल रिबूटिंग किया (उबंटू 18.04)
जोकिम टाल

360

उन्नयन के बाद मुझे अनुमति से वंचित कर दिया गया। 'Mkb' पोस्ट इंस्टाल करने के चरणों को करने से कुछ भी नहीं बदलता है क्योंकि मेरा उपयोगकर्ता पहले से ही 'docker' समूह में था; मैं सफलता के बिना किसी भी तरह से दो बार रिटायर करता हूं।

एक खोज घंटे के बाद इस अंतिम समाधान ने काम किया:

sudo chmod 666 /var/run/docker.sock

ओलशनस्क से समाधान आया ।

अपग्रेड ऐसा लगता है कि 'docker' समूह के लिए पर्याप्त अनुमति के बिना सॉकेट को फिर से बनाया गया है।

समस्या

यह हार्ड chmod ओपन सिक्योरिटी होल है और प्रत्येक रिबूट के बाद, यह त्रुटि फिर से शुरू होती है और आपको हर बार उपरोक्त कमांड को फिर से निष्पादित करना होगा। मुझे एक बार और सभी के लिए एक समाधान चाहिए। इसके लिए आपको दो समस्याएं हैं:

  • 1) समस्या के साथSystemD : सॉकेट केवल स्वामी 'रूट' और समूह 'रूट' के साथ बनाया जाएगा।

    आप इस आदेश के साथ इस पहली समस्या की जाँच कर सकते हैं:

    ls -l /lib/systemd/system/docker.socket
    

    यदि यह सब अच्छा है, तो आपको ' root/docker' नहीं ' root/root' देखना चाहिए ।

  • 2) चित्रमय लॉगिन के साथ समस्या : /superuser/1348196/why-my-linux-account-only-belongs-to-one-group

    आप इस आदेश के साथ इस दूसरी समस्या की जाँच कर सकते हैं:

    groups
    

    यदि सब कुछ सही है, तो आपको सूची में docker समूह को देखना चाहिए । यदि आज्ञा नहीं है

    sudo su $USER  -c groups
    

    यदि आप देखते हैं तो docker समूह यह बग के कारण है।

समाधान

यदि आप ग्राफ़िकल लॉगिन के लिए वर्कअराउंड प्राप्त करने का प्रबंधन करते हैं, तो यह काम करना चाहिए:

sudo chgrp docker /lib/systemd/system/docker.socket
sudo chmod g+w /lib/systemd/system/docker.socket

लेकिन अगर आप इस बग का प्रबंधन नहीं कर सकते, तो इतना बुरा समाधान यह नहीं हो सकता है:

sudo chgrp $USER /lib/systemd/system/docker.socket
sudo chmod g+w /lib/systemd/system/docker.socket

यह काम इसलिए है क्योंकि आप एक ग्राफिकल एनकाउंटेनमेंट में हैं और शायद आपके कंप्यूटर पर एकमात्र उपयोगकर्ता है। दोनों ही स्थिति में आपको रिबूट (या sudo chmod 666 /var/run/docker.sock) की आवश्यकता है


2
यदि डॉक्स docs.docker.com/install पर डॉक्स के अनुसार स्थापित किया गया था, तो आपको ऐसे किसी भी कमांड से निपटने की आवश्यकता नहीं है
स्कॉट स्टेंसलैंड

4
@ स्कॉट स्टेंसलैंड मैंने कई बार 'डॉक्टर के अनुसार' डॉक स्थापित किया है। मुझे लगता है कि समस्या एक अन्य अज्ञात पैकेज के साथ खराब बातचीत से आती है।
गैलीगेटर

1
Docker-in-docker में, मैं गलत तरीके से :roअंत तक होस्ट के बिना /var/run/docker.sock को बढ़ा रहा था ... जैसे ही मैंने जोड़ा कि मैं जाने के लिए अच्छा था
jakebrinkmann

2
मैं EC2 पर ubuntu 18 का उपयोग करता हूं - AWS और प्रीफेक्टली काम किया। अन्य सभी (sudo usermod -aG docker $ USER और अन्य सामान) ने काम नहीं किया
cherah30

1
धन्यवाद, यह Ubuntu 18.04 LTS में तय किया गया। विश्राम और गर्व से जोड़ना
दीपांशु परमानी

32
  1. डॉकटर समूह जोड़ें
$ sudo groupadd docker
  1. अपने वर्तमान उपयोगकर्ता को docker ग्रुप में जोड़ें
$ sudo usermod -aG docker $USER
  1. स्विच सत्र docker समूह के लिए
$ newgrp - docker
  1. परीक्षण करने के लिए एक उदाहरण चलाएँ
$ docker run hello-world

newgrpआदेश पासवर्ड के लिए संकेत और मेरे उपयोगकर्ता पासवर्ड को स्वीकार नहीं किया। इसके बजाय su - $USER/ में लॉग आउट करने से बचने के लिए काम किया।
bluenote10

18
  1. dockerसमूह में वर्तमान उपयोगकर्ता जोड़ें
sudo usermod -aG docker $USER
  1. डॉक सॉकेट से कनेक्ट करने में सक्षम होने के लिए डॉक सॉकेट की अनुमति बदलें /var/run/docker.sock
sudo chmod 666 /var/run/docker.sock

15

मैं इस त्रुटि को कमांड के साथ हल करता हूं:

$ sudo chmod 666 /var/run/docker.sock

9

आप हमेशा https://docs.docker.com/install/linux/linux-postinstall/ डॉक्स Manage Docker as a non-root userमें पैराग्राफ आज़मा सकते हैं ।

ऐसा करने के बाद भी अगर समस्या बनी रहती है तो आप इसे हल करने के लिए निम्न कमांड चला सकते हैं:

sudo chmod 666 /var/run/docker.sock

2
Docker सॉकेट को पढ़ने योग्य या सभी के साथ लिखने योग्य बनाना (के साथ chmod 666) एक सुरक्षा आपदा है ... यह कभी भी अनुशंसित नहीं होना चाहिए।
अयला सिकुरा

6

डॉक्स डेमन सॉकेट को यूनिक्स में कनेक्ट करने की कोशिश करते समय अनुमति मिल गई : /var/run/docker.sock: कनेक्ट: अनुमति अस्वीकृत

sudo chmod 666 /var/run/docker.sock

यह मेरी समस्या को ठीक करता है।


2

उस मुद्दे को ठीक करने के लिए, मैंने खोजा कि मेरा डॉकटर और डॉकटर-कम्पोज़ कहाँ स्थापित है। मेरे मामले में, dockerमें स्थापित किया गया था /usr/bin/dockerऔर पथ docker-composeमें स्थापित किया गया था /usr/local/bin/docker-compose। फिर, मैं इसे अपने टर्मिनल में लिखता हूं:

करने के लिए:

sudo chmod +x /usr/bin/docker

को docker-compose:

sudo chmod +x /usr/local/bin/docker-compose

अब मुझे अपने आदेशों में शब्द लिखने की जरूरत नहीं है sudo

/ ************************************************* ********************** /

शुद्धिपत्र:

इस मुद्दे का सबसे अच्छा समाधान @mkasberg द्वारा टिप्पणी की गई थी। मैं टिप्पणी उद्धृत करता हूं:

That might work, you might run into issues down the road. Also, it's a security vulnerability. You'd be better off just adding yourself to the docker group, as the docs say. sudo groupadd docker, sudo usermod -aG docker $USER. Docs: https://docs.docker.com/install/linux/linux-postinstall/

आपका बहुत बहुत धन्यवाद!


2
यह काम कर सकता है, आप सड़क के नीचे के मुद्दों में भाग सकते हैं। इसके अलावा, यह एक सुरक्षा भेद्यता है। dockerडॉक्स के अनुसार, आप अपने आप को समूह में जोड़ना बेहतर समझेंगे। sudo groupadd docker, sudo usermod -aG docker $USER
mkasberg

अरे @ ममासबर्ग! आपके कमेंट के लिए धन्यवाद! मैंने आपके समाधान का हवाला देते हुए इरेटा बनाया। आपका बहुत बहुत धन्यवाद!
कार्लोस एंड्रेस

1

lightdm और kwallet जहाज एक बग के साथ जो लॉगिन पर पूरक समूहों को पास नहीं करता है। इसे हल करने के लिए, मुझे भी, बगल में sudo usermod -aG docker $USERटिप्पणी करनी पड़ी

auth optional pam_kwallet.so
auth optional pam_kwallet5.so

सेवा

#auth optional pam_kwallet.so
#auth optional pam_kwallet5.so

में /etc/pam.d/lightdm रिबूट करने से पहले वास्तव में करने के लिए डोकर-समूह के लिए, प्रभाव है।

बग: https://bugs.launchpad.net/lightdm/+bug/1781418 और यहाँ: https://bugzilla.redhat.com/show_bug.cgi?id=1581495



1

गंभीरता से लोग। अपने समूहों में डॉकर को शामिल न करें या सॉकेट पॉज़िक्स (एक सख्त SELinux के बिना) को संशोधित करता है, यह रूट प्राइवेट बनाने का एक सरल तरीका है। बस अपने .bashrc में एक उपनाम जोड़ें, यह अधिक सरल और सुरक्षित है: उपनाम dc = 'sudo docker'।


1

आप इन चरणों का पालन कर सकते हैं और यह आपके लिए काम करेगा:

  1. एक डॉकटर समूह बनाएं sudo groupadd docker
  2. अपने उपयोगकर्ता को इस समूह में जोड़ें sudo usermod -aG docker $USER
  3. यह सुनिश्चित करने के लिए समूहों को सूचीबद्ध करें कि इस कमांड को चलाकर docker group सफलतापूर्वक बनाया गया है groups
  4. निम्न आदेश को भी docker समूह के लिए सत्र बदलने के लिए चलाएँ newgrp docker
  5. फ़ाइल docker.sock के लिए समूह के स्वामित्व को बदलेंsudo chown root:docker /var/run/docker.sock
  6. .docker निर्देशिका के लिए स्वामित्व बदलें sudo chown "$USER":"$USER" /home/"$USER"/.docker -R
  7. आखिरकार sudo chmod g+rwx "$HOME/.docker" -R

उस टेस्ट के बाद आप दौड़ सकते हैं docker ps -a


मुझे एक जवाब चाहिए था जिसमें रिबूट करने की आवश्यकता नहीं है। यह एकमात्र उत्तर था जो प्रदान करता था। "चाल" chowndocker.sock फ़ाइल के लिए है।
पर्ट्का

1

आपके द्वारा docker स्थापित करने के बाद, 'docker' समूह बनाया गया और उसमें उपयोगकर्ता को जोड़ा गया, docker सेवा इकाई फ़ाइल को संपादित करें:

sudo nano /usr/lib/systemd/system/docker.service

अनुभाग में दो लाइनें जोड़ें [सेवा]:

SupplementaryGroups=docker    
ExecStartPost=/bin/chmod 666 /var/run/docker.sock

फ़ाइल सहेजें (Ctrl-X, y, Enter)

डॉकर सेवा चलाएं और सक्षम करें:

sudo systemctl daemon-reload
sudo systemctl start docker
sudo systemctl enable docker

0

Centos पर डॉकर इंस्टॉलेशन के बाद। कमांड से नीचे चलने के दौरान मुझे नीचे त्रुटि हुई।

[centos@aiops-dev-cassandra3 ~]$ docker run hello-world
docker: Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Post http://%2Fvar%2Frun%2Fdocker.soc k/v1.40/containers/create: dial unix /var/run/docker.sock: connect: permission denied.
See 'docker run --help'.

Docker.socket के लिए समूह और अनुमति बदलें

[centos@aiops-dev-cassandra3 ~]$ ls -l /lib/systemd/system/docker.socket
-rw-r--r--. 1 root root 197 Nov 13 07:25 /lib/systemd/system/docker.socket
[centos@aiops-dev-cassandra3 ~]$ sudo chgrp docker /lib/systemd/system/docker.socket
[centos@aiops-dev-cassandra3 ~]$ sudo chmod 666 /var/run/docker.sock
[centos@aiops-dev-cassandra3 ~]$ ls -lrth /var/run/docker.sock
srw-rw-rw-. 1 root docker 0 Nov 20 11:59 /var/run/docker.sock
[centos@aiops-dev-cassandra3 ~]$

नीचे दिए गए आदेश का उपयोग करके सत्यापित करें

[centos@aiops-dev-cassandra3 ~]$ docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
1b930d010525: Pull complete
Digest: sha256:c3b4ada4687bbaa170745b3e4dd8ac3f194ca95b2d0518b417fb47e5879d9b5f
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (amd64)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/get-started/

[centos@aiops-dev-cassandra3 ~]$

-4

सुडो चामोद ६६६ / /वार / द्रोण_डॉक

इससे मुझे मदद मिली जबकि मुझे डॉक करने के लिए लॉग इन करने में भी त्रुटि हो रही थी लेकिन अब यह मेरे सिस्टम में पूरी तरह से ठीक है।


1
इस पद्धति का उपयोग करना बहुत असुरक्षित है। मुख्य प्रश्न में टिप्पणियों पर प्रदान किए गए पोस्ट-इंस्टॉलेशन निर्देशों की समीक्षा करें।
एलेजांद्रो विसीदो गार्सिया
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.