Ubuntu में डॉकटर के लिए अनुमति की समस्याओं को कैसे हल करें?


35

मैंने यहां वर्णित के रूप में डॉकटर स्थापित किया है । मैं Ubuntu भरोसेमंद 14.04 (LTS) (64-बिट) का उपयोग करता हूं । स्थापना के दौरान सब कुछ ठीक था। कमांड भी $ sudo docker run -i -t ubuntu /bin/bashअच्छी तरह से पूरा होता है (ओपन कंसोल में "बाहर निकलने" टाइप करने के बाद। लेकिन जब मैं कुछ और करने की कोशिश करता हूं तो मुझे "अनुमति" से इनकार कर दिया जाता है। उदाहरण के लिए)

`$ sudo docker run -d -P training/webapp python app.py`

में पुन: प्रकाशित होता है Post http:///var/run/docker.sock/v1.12/containers/create: dial unix /var/run/docker.sock: permission denied

` docker info`

में पुन: प्रकाशित होता है Get http:///var/run/docker.sock/v1.12/info: dial unix /var/run/docker.sock: permission denied

इसे कैसे हल करें? मैं समस्या के बारे में भटक गया लेकिन मुझे अपने मामले का हल नहीं मिला।

जवाबों:


50

यदि यह पहले से मौजूद नहीं है, तो docker समूह जोड़ें।

$ sudo groupadd docker

कनेक्ट किए गए उपयोगकर्ता ${USER}को docker समूह में जोड़ें। अपने पसंदीदा उपयोगकर्ता से मिलान करने के लिए उपयोगकर्ता नाम बदलें।

$ sudo gpasswd -a ${USER} docker

डॉकटर डेमॉन को फिर से शुरू करें:

$ sudo service docker restart # Or docker.io for older versions
# 18.04+ with snap:
$ sudo systemctl restart snap.docker.dockerd

आपको समूह अनुमतियों को अपडेट करने के लिए लॉग आउट और लॉग इन करना चाहिए। उस से बचने के लिए, आप एक उप-प्रकार पर स्विच कर सकते हैं। या इस प्रश्न में वर्णित किसी भी अन्य ट्रिक का उपयोग करें :

su - $USER

14
मुझे इसे लेने के लिए रिबूट करना पड़ा।
obsoleter

8
रिबूट करने की जरूरत नहीं है, बस लॉगआउट और लॉगिन करें।
अजय गौतम

2
लॉगआउट किया, तब exec $SHELLभी नहीं किया। मुझे यह जानने में दिलचस्पी है कि किस तंत्र द्वारा लॉग आउट करने से समस्या हल हो गई। यह विंडोज़ नहीं है!
डार एग्रीशियस

1
फेडोरा में, पहले आपको एडिट /etc/selinux/configऔर पुट करना होगा SELINUX=disabled, फिर रिबूट लिनक्स
जूनियर एम

1
महान व्याख्या! आप सर्वश्रेष्ठ हैं! :)
फ्रांसिस रोड्रिग्स

5

यदि आप CentOS या RedHat चला रहे हैं, तो आपको चलाने से पहले SELinux को निष्क्रिय करना पड़ सकता है:

setenforce 0

Eiter फिर से शुरू करने के लिए SELinux या फिर रन करने योग्य है setenforce 1


4

मुझे एक ही समस्या थी, सेलिनक्स के कारण। आप जाँच कर सकते हैं कि क्या सेलिनक्स अपराधी है:

  1. सेलिनक्स को अक्षम करना: setenforce 0
  2. पुनः प्रयास किया जाएगा

यदि सेलिनक्स को अक्षम करने से आपकी समस्या हल हो गई है, तो इसे अक्षम करने का कोई कारण नहीं है:

  1. सेलेनक्स सक्षम करें: setenforce 1
  2. Selinux कॉन्फ़िगरेशन में सॉकेट कनेक्शन को अनुमति दें: setsebool docker_connect_any true
  3. --priviledgedविकल्प के साथ अपने डॉकर कंटेनर को चलाएं

3

मुझे लगता है, आपका उपयोगकर्ता नाम पहले से ही docker group में है। इसे जांचने के लिए, कमांड के नीचे जारी करें।

id -nG

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

sudo groupadd docker
sudo usermod -aG docker $USER

जब आप कमांड निष्पादित करते हैं, sudo systemctl start dockerतो यह डॉकटर प्रक्रिया बनाता है। उस डॉकटर प्रक्रिया में dockerdडेमन थ्रेड होता है। कमांड डिफॉल्ट docker.sockयूनिक्स सॉकेट भी बनाती है । docker.sockसॉकेट लगातार द्वारा सुनी है dockerdडेमॉन धागा। इससे आप docker.pidप्रक्रिया के साथ कर्नेल-स्तरीय IPC कर सकते हैं । इस डॉक सॉकेट का उपयोग करने में सक्षम होने के लिए, आपको प्रक्रिया स्तर ( docker.pid) और फ़ाइल स्तर ( docker.sock) से उचित अनुमति लेनी होगी । इसलिए, दो कमांड के नीचे निष्पादित करने से आपकी समस्या का समाधान होना चाहिए। sudo chmod a+rwx /var/run/docker.sock # You can provide just execute permission sudo chmod a+rwx /var/run/docker.pid


1

द्वारा वर्तमान संस्करण हम समूह को जोड़ नहीं की जरूरत है docker
यह स्थापना के द्वारा स्वचालित रूप से मौजूद है। आप कमांड का उपयोग करके देख सकते हैं:

$ sudo groupadd docker
groupadd: group 'docker' already exists

इसलिए डॉकर को एक गैर-रूट उपयोगकर्ता के रूप में प्रबंधित करने के लिए , बस अपने उपयोगकर्ता को डॉकटर समूह में जोड़ें और फिर लॉग आउट करें और वापस लॉग इन करें ताकि आपके समूह की सदस्यता का पुनर्मूल्यांकन हो:

$ sudo usermod -aG docker $USER
$ logout

जब आप वापस लॉग इन करते हैं तो इसे चेक करने के लिए

$ docker run hello-world
Hello from Docker!
This message shows that your installation appears to be working correctly.

तुम भी GROUP:dockerअपने नए प्राथमिक समूह के रूप में उपयोग करने के लिए मजबूर कर सकते हैं :

$ sudo chown "$USER":"docker" /home/"$USER"/.docker -R
$ sudo chmod g+rwx "$HOME/.docker" -R
$ sudo usermod -g docker ${USER}
$ logout

जब आप वापस लॉग इन करते हैं तो इसे चेक करने के लिए

$ id
uid=1001(<user_name>) gid=999(docker) groups=999(docker),...
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.