डॉकटर कंटेनर के अंदर रूट पासवर्ड


265

मैं एक डॉकर छवि का उपयोग कर रहा हूं, जिसे USER कमांड का उपयोग करके गैर-रूट उपयोगकर्ता का उपयोग करने के लिए बनाया गया था dev। एक कंटेनर के अंदर, मैं "देव" हूं, लेकिन मैं /etc/hostsफ़ाइल को संपादित करना चाहता हूं ।

इसलिए मुझे जड़ होने की जरूरत है। मैं su कमांड की कोशिश कर रहा हूं, लेकिन मुझे रूट पासवर्ड दर्ज करने के लिए कहा गया है।

डॉकटर कंटेनर के अंदर डिफ़ॉल्ट रूट उपयोगकर्ता का पासवर्ड क्या है?


11
बस एक जड़ के रूप में निष्पादित करें docker exec -u 0 -it mycontainer bash:। (देखें H6जवाब)
शालोमोइर लेनार्ट

जवाबों:


494

आप -uविकल्प का उपयोग करते समय दिए गए डिफ़ॉल्ट उपयोगकर्ता के बजाय रूट उपयोगकर्ता (ID = 0) का उपयोग करके डॉकटर कंटेनर में लॉग इन कर सकते हैं । उदाहरण के लिए

docker exec -u 0 -it mycontainer bash

रूट (आईडी = 0) एक कंटेनर के भीतर डिफ़ॉल्ट उपयोगकर्ता है। छवि डेवलपर अतिरिक्त उपयोगकर्ता बना सकता है। वे उपयोगकर्ता नाम से सुलभ हैं। एक संख्यात्मक आईडी पास करते समय, उपयोगकर्ता को कंटेनर में मौजूद नहीं होना चाहिए।

डॉकर प्रलेखन से


5
यह निर्दिष्ट करना अच्छा होगा कि जब आप ऊपर दिए गए कॉमरेड टाइप करते हैं, तो आपको mycontainer की आवश्यकता होती है और उस समय चल रही होती है। यह 2 अलग-अलग टर्मिनलों का उपयोग करके काम करता है: एक mycontainer के लिए और दूसरा इस कमांड के लिए। अन्यथा यह आवश्यक है कि mycontainer अलग किया जा रहा है।
निकोलिमोरी

6
छवियों के लिए, उपयोग करेंdocker run -u 0 -it mycontainer bash
पावेल 'पीके' कमिंसकी

2
यह वह उत्तर है जो शीर्ष पर होना चाहिए
डी पिंटो

1
@ High6, जब आप कहते हैं "आप डॉकटर छवि में लॉग इन कर सकते हैं ...", मुझे लगता है कि आपका मतलब है "आप डॉकटर कंटेनर में लॉग इन कर सकते हैं "।
lmiguelvargasf

क्या यह हमेशा संभव है? या इसे ब्लॉक किया जा सकता है?
सैम थॉमस

82

आखिरकार, मैंने अपनी डॉकरों की छवियों को फिर से बनाने का फैसला किया, ताकि मैं कुछ पता करके रूट पासवर्ड बदलूं।

RUN echo 'root:Docker!' | chpasswd

या

RUN echo 'Docker!' | passwd --stdin root 

5
मैंने यह कोशिश की लेकिन यह मेरे CentOS 6 आधारित डॉकटर पर काम नहीं करता है। क्या यह कमांड CentOS आधारित डॉकटर पर काम करता है?
ड्रेगन निकोलिक

28

इसे करने के कुछ तरीके हैं।

  1. USER सेटिंग को ओवरराइड करने के लिए डॉकर चलाना

    docker exec -u 0 -it containerName bash
    

या

docker exec -u root -it --workdir / <containerName> bash
  1. Docker फ़ाइल में छवि निर्माण के दौरान आवश्यक फ़ाइल अनुमतियाँ इत्यादि बनाएँ

  2. यदि सभी पैकेज आपकी लिनक्स छवि में उपलब्ध हैं, chpasswdतो USER उपयोगिता से पहले dockerfile में।



23

मैं इसे नीचे दिए गए आदेश के साथ काम करने में सक्षम हूं।

root@gitnew:# docker exec -it --user $(username) $(containername) /bin/bash

18

मेरे पास रूट करने में सक्षम नहीं होने की बिल्कुल समस्या थी क्योंकि मैं कंटेनर में एक अनपेक्षित उपयोगकर्ता के रूप में चल रहा था।

लेकिन मैं एक नई छवि का पुनर्निर्माण नहीं करना चाहता था जैसा कि पिछले उत्तरों से पता चलता है।

इसके बजाय मैंने पाया है कि मैं 'nsenter' का उपयोग करके कंटेनर को रूट के रूप में एक्सेस कर सकता हूं, देखें: https://github.com/jpetaz//enter

पहले मेजबान पर अपने कंटेनर का पीआईडी ​​निर्धारित करें:

docker inspect --format {{.State.Pid}} <container_name_or_ID>

फिर कंटेनर को जड़ के रूप में दर्ज करने के लिए nsenter का उपयोग करें

nsenter --target <PID> --mount --uts --ipc --net --pid

1
Boot2docker का उपयोग करना, मैं का इस्तेमाल किया थाsudo nsenter --target <PID> --mount --uts --ipc --net --pid
peater

हाँ, अच्छी बात है। आपको आम तौर पर docker कमांड को निष्पादित करने के लिए रूट अनुमति की आवश्यकता होती है और मुझे लगता है कि nsenter समान है। मैंने अपने उत्तर में इसे पूरी तरह स्पष्ट नहीं किया।
रिचर्ड कोरफील्ड

4
जब से यह उत्तर लिखा गया था, डॉकटर ने कमांड निष्पादन को मूल रूप से nsenter के समान ही करने के लिए जोड़ा है, लेकिन आसान और क्लीनर। उन लोगों के लिए बस एक डेटा बिंदु जो अब खोज के माध्यम से इस सवाल का पता लगाते हैं। कमांड "docker exec -it <regername> <कमांड>" है (कमांड आमतौर पर / बिन / बैश है, लेकिन आप जो चाहें कर सकते हैं)।
केविन कीन

इसके अलावा, docker को मेजबानों (और resolv.conf) के लिए विशेष उपचार है। आपको उन्हें मैन्युअल रूप से संपादित नहीं करना चाहिए; डॉक प्रत्येक कंटेनर पर / आदि / मेजबानों को फिर से जोड़ता है और लिंक किए गए कंटेनरों और जैसे को प्रतिबिंबित करने के लिए शुरू करता है।
केविन कीन


9

अपने रनिंग कंटेनर का एक शेल प्राप्त करें और रूट पासवर्ड बदलें:

docker exec -it <MyContainer> bash

root@MyContainer:/# passwd
Enter new UNIX password:
Retype new UNIX password:


5

पासवर्ड 'ubuntu' उपयोगकर्ता के लिए 'ubuntu' है (कम से कम ubuntu: 14.04.03 के लिए docker में)।

NB: कंटेनर के स्टार्टअप के बाद 'ubuntu' बनाई जाती है, यदि आप ऐसा करते हैं:

 docker run -i -t --entrypoint /bin/bash  ubuntu     

आपको सीधे रूट प्रॉम्प्ट मिलेगा। वहां से आप रूट के पासवर्ड परिवर्तन को बाध्य कर सकते हैं, कंटेनर को कम कर सकते हैं और वैकल्पिक रूप से इसे (-f) ubuntu के लिए टैग कर सकते हैं:

root@ec384466fbbb:~# passwd
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
root@ec384466fbbb:~# exit

% docker commit ec3844
5d3c03e7d6d861ce519fe33b184cd477b8ad03247ffe19b2a57d3f0992d71bca

docker tag -f 5d3c ubuntu:latest

आपको ubuntu पर अपनी अंतिम निर्भरता का पुनर्निर्माण करना चाहिए: नवीनतम।


3

मैं एक बेहतर उपाय सुझाता हूं कि --add-host NAME:IPकंटेनर शुरू करते समय डॉक चलाने के लिए तर्क दें । वह /etc/hosts/रूट अपडेट किए बिना फ़ाइल को अपडेट करेगा ।

अन्यथा, आप ध्वज को ध्वज USERदेकर सेटिंग को ओवरराइड कर सकते हैं । मैं इसके खिलाफ सलाह दूंगा, क्योंकि आप वास्तव में एक चल रहे कंटेनर में चीजों को नहीं बदलना चाहिए। इसके बजाय, डॉकरफाइल में अपने बदलाव करें और एक नई छवि बनाएं।-u USERdocker run


जब कंटेनर चल रहा हो तो मुझे होस्ट्स फ़ाइल में प्रविष्टियाँ जोड़ने की आवश्यकता है।
छापामार

मुझे नया पैकेज स्थापित करने की भी आवश्यकता है, लेकिन मैं नहीं कर सकता क्योंकि मैं जड़ नहीं हूं।
छापामार

1
आप -uउपयोगकर्ता को बदलने के लिए ध्वज का उपयोग कर सकते हैं । मुझे नहीं लगता कि आप इसे कंटेनर के अंदर से कर सकते हैं।
एड्रियन मौट


2

जब आप कंटेनर शुरू करते हैं, तो आप रूट होंगे लेकिन आपको यह नहीं पता होगा कि रूट का पॉट क्या है। इसे कुछ ऐसे सेट करने के लिए जिन्हें आप जानते हैं कि बस "पासवार्ड रूट" का उपयोग करें। स्नैपशॉट / कंटेनर को अपने कार्यों को बचाने के लिए प्रतिबद्ध करें।


1

डिफ़ॉल्ट रूप से डॉक कंटेनर rootउपयोगकर्ता के रूप में चलते हैं ।

यदि आप अभी भी कंटेनर का उपयोग कर रहे हैं, तो आप कंटेनर को फिर से चलाने के बजाय (डिफ़ॉल्ट उपयोगकर्ता) उपयोगकर्ता exitको वापस लाने के लिए कमांड का उपयोग कर सकते हैं root

उदाहरण -

[dev@6c4c86bccf93 ~]$ ls
[dev@6c4c86bccf93 ~]$ other-commands..
[dev@6c4c86bccf93 ~]$ exit
[root@6c4c86bccf93 /]# ls

0

रूट एक्सेस प्राप्त करने के लिए निम्न कमांड का प्रयास करें

$ sudo -i 

यह तब तक काम करने की संभावना नहीं है जब तक आपके पास कंटेनर सेटअप में sudo एक्सेस के साथ खाता न हो। यह एक असामान्य स्थिति होगी और कंटेनर को चलाने वाले गैर-रूट उपयोगकर्ता होने की बात को तोड़ देगा।
योशिय्याह

किसी को भी पता है कि DFAULT रेंडर के लिए DEFAULT su पासवर्ड? मैंने ऊंचाई बढ़ाने की कोशिश की और वहाँ एक सेट है।
पैट्रिक बुरवेल

डॉक छवि को निर्यात करने और डब्लूएसएल 2 में आयात करने के बाद डब्ल्यूएसएल 2 में यह काम किया। वहां से, रूट के लिए पासवर्ड सेट करने के लिए बस पासवार्ड करें। गैर-रूट उपयोगकर्ता से बाहर निकलें और sudo su या su का प्रयास करें। अब यह काम करेगा।
WSLUser

0

कुछ मामलों में आपको उन चीजों को करने में सक्षम होने की आवश्यकता होती है, जैसे कि उपयोगकर्ता के अंतर्गत sudo(जैसे कि कंटेनर में चल रहा एप्लिकेशन उपयोगकर्ताओं को एक शेल प्रदान करता है)। बस आप Dockerfile में इसे जोड़ें:

RUN apt-get update         # If necessary
RUN apt-get install sudo   # If your base image does not contain sudo.
RUN useradd -m -N -s /bin/bash -u 1000 -p '$1$miTOHCYy$K.c4Yw.edukWJ7z9rbpTZ0' user && \
    usermod -aG sudo user  # Grant sudo to the user
USER user

अब डिफॉल्ट इमेज यूजर के तहत userआप sudoलाइन 3 पर पासवर्ड सेट के साथ कर पाएंगे ।

useradd यहाँ या यहाँ के लिए पासवर्ड हैश जेनरेट करने का तरीका देखें ।

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