2017-02-10 15 views
12

मेरे पास सीआई के लिए डॉकर सेटअप में डॉकर है। अनिवार्य रूप से, मशीन पर जेनकींस सीआई सर्वर है जो सीआई के लिए नोड बनाने के लिए एक ही मशीन डॉकर सॉकेट का उपयोग करता है।डॉकर अनुमतियों में डॉकर त्रुटि

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

host $ docker exec -it myjenkins bash 
[email protected] $ docker ps 
Got permission denied while trying to connect to the Docker daemon 
socket at unix:///var/run/docker.sock: Get http://%2Fvar%2Frun%2Fdocker.sock/v1.26/containers/json: dial unix /var/run/docker.sock: connect: permission denied 

host $ docker exec -it -u root -it myjenkins bash 
[email protected] $ docker ps 
... docker ps from host container yay! ... 

तो यहां मैं अनुमान लगाता हूं। मेरे पास कंटेनर के भीतर से होस्ट डॉकर सॉकेट तक पहुंच है, लेकिन मुझे जेनकिंस उपयोगकर्ता को अनुमति नहीं दे रही है।

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

क्या किसी विशेष सॉकेट पर किसी उपयोगकर्ता के लिए अनुमतियों को लागू करने का कोई तरीका है?

+0

बाहर काम किया है, तो आप (अंदर रूट के रूप में) एक विशेषाधिकार प्राप्त कंटेनर के साथ एक ही बात की कोशिश की थी? –

+0

यदि आप मेरा प्रश्न देखते हैं जहां मैं कंसोल प्रस्तुत करता हूं। मैंने दिखाया कि मैंने जेनकींस उपयोगकर्ता के रूप में कोशिश की, और फिर कंटेनर के रूट उपयोगकर्ता के रूप में। रूट उपयोगकर्ता के पास पहुंच है, जेनकींस उपयोगकर्ता नहीं करता है। –

+0

जिज्ञासा से बाहर, क्या आपने एक ही विशेषाधिकार * कंटेनर (अंदर जेनकिंस के रूप में) –

उत्तर

13

आपको अपने मेजबान पर डॉकर समूह के ग्रिड को उस समूह के ग्रिड पर मैप करना होगा जो जेनकिंस आपके कंटेनर के अंदर है। यहाँ मेरी Dockerfile से कैसे मैं एक जेनकींस गुलाम छवि का निर्माण किया है का एक नमूना है:

ARG DOCKER_GID=993 

RUN groupadd -g ${DOCKER_GID} docker \ 
    && curl -sSL https://get.docker.com/ | sh \ 
    && apt-get -q autoremove \ 
    && apt-get -q clean -y \ 
    && rm -rf /var/lib/apt/lists/* /var/cache/apt/*.bin 

RUN useradd -m -d /home/jenkins -s /bin/sh jenkins \ 
    && usermod -aG docker jenkins 

993 इस उदाहरण में मेजबान पर डोकर की gid होता है, आप अपने वातावरण से मेल करने के लिए समायोजित चाहते हैं। ओपी से


समाधान: तो पुनर्निर्माण एक संभावना आप रूट का उपयोग करने में तदनुसार डोकर समूह की स्थापना की और उपयोगकर्ता जोड़ सकते हैं नहीं है। आप इस प्रयास किया है तो आप दास (groupdel docker) पर समूह को नष्ट करना पड़ सकता है से पहले:

docker exec -it -u root myjenkins bash 
container $ groupadd -g 993 docker 
container $ usermod -aG docker jenkins 
+0

ठीक है। समझा। मेजबान डॉकर 999 है। दास डॉकर में 1001 है। तो आप क्या कह रहे हैं कि मुझे यह सुनिश्चित करने की ज़रूरत है कि दास पर ग्रिड मेजबान जैसा ही है? क्या आपको लगता है कि मैं सिर्फ '/ etc/group' संपादित करने से दूर हो सकता हूं? –

+1

docker.sock फ़ाइल पर gid भी कंटेनर के अंदर उपयोगकर्ता का एक ग्रिड होना चाहिए। आप इस आईडी के साथ छवि के अंदर कोई भी समूह बना सकते हैं, और उस समूह में जेनकींस जोड़ सकते हैं। होस्ट पर/etc/group को बदलना फ़ाइलों पर भी अनुमतियों को ठीक किए बिना काम नहीं करेगा। – BMitch

+1

उत्कृष्ट उत्कृष्ट उत्कृष्ट। मैं अपने फिक्स के साथ अपना जवाब अपडेट करने जा रहा हूं। –

0

शुरुआत में sudo शामिल करके अपने जड़ उपयोगकर्ता के साथ आदेश निष्पादित।

0

व्यक्तिगत रूप से, मैं सिर्फ यह करने के लिए मिला है:

sudo gpasswd -a $USER docker 

और यह सिर्फ जिज्ञासा से बाहर