2014-07-03 9 views
35

पर स्विच करना मैं एसएसएच प्रमाण पत्र सेट करने के लिए उपयोगकर्ता को tomcat7 उपयोगकर्ता पर स्विच करने की कोशिश कर रहा हूं।उपयोगकर्ताओं को डॉकर छवि के अंदर एक गैर-रूट उपयोगकर्ता

जब मैं su tomcat7 करता हूं, कुछ भी नहीं होता है।

whoami अभी भी su tomcat7

कर एक more /etc/passwd करने के बाद जड़ ruturns, मैं निम्नलिखित परिणाम जो स्पष्ट रूप से पता चलता है कि एक tomcat7 उपयोगकर्ता मौजूद है:

root:x:0:0:root:/root:/bin/bash 
daemon:x:1:1:daemon:/usr/sbin:/bin/sh 
bin:x:2:2:bin:/bin:/bin/sh 
sys:x:3:3:sys:/dev:/bin/sh 
sync:x:4:65534:sync:/bin:/bin/sync 
games:x:5:60:games:/usr/games:/bin/sh 
man:x:6:12:man:/var/cache/man:/bin/sh 
lp:x:7:7:lp:/var/spool/lpd:/bin/sh 
mail:x:8:8:mail:/var/mail:/bin/sh 
news:x:9:9:news:/var/spool/news:/bin/sh 
uucp:x:10:10:uucp:/var/spool/uucp:/bin/sh 
proxy:x:13:13:proxy:/bin:/bin/sh 
www-data:x:33:33:www-data:/var/www:/bin/sh 
backup:x:34:34:backup:/var/backups:/bin/sh 
list:x:38:38:Mailing List Manager:/var/list:/bin/sh 
irc:x:39:39:ircd:/var/run/ircd:/bin/sh 
gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/bin/sh 
nobody:x:65534:65534:nobody:/nonexistent:/bin/sh 
libuuid:x:100:101::/var/lib/libuuid:/bin/sh 
messagebus:x:101:104::/var/run/dbus:/bin/false 
colord:x:102:105:colord colour management daemon,,,:/var/lib/colord:/bin/false 
saned:x:103:106::/home/saned:/bin/false 
tomcat7:x:104:107::/usr/share/tomcat7:/bin/false 

क्या मैं आस-पास काम करने के लिए कोशिश कर रहा हूँ यह है हडसन में त्रुटि:

Command "git fetch -t [email protected]________.co.za:_______/_____________.git +refs/heads/*:refs/remotes/origin/*" returned status code 128: Host key verification failed. 

यह मेरा डॉकरफ़ाइल है, यह मौजूदा हडसन युद्ध फ़ाइल लेता है एनडी कॉन्फ़िगरेशन जो टैरर्ड है और एक छवि बनाता है, हडसन ठीक चलाता है, यह केवल उपयोगकर्ता tomcat7 के लिए मौजूद प्रमाणपत्रों के कारण गिट तक नहीं पहुंच सकता है।

FROM debian:wheezy 

# install java on image 
RUN apt-get update 
RUN apt-get install -y openjdk-7-jdk tomcat7 

# install hudson on image 
RUN rm -rf /var/lib/tomcat7/webapps/* 
ADD ./ROOT.tar.gz /var/lib/tomcat7/webapps/ 

# copy hudson config over to image 
RUN mkdir /usr/share/tomcat7/.hudson 
ADD ./dothudson.tar.gz /usr/share/tomcat7/ 
RUN chown -R tomcat7:tomcat7 /usr/share/tomcat7/ 

# add ssh certificates 
RUN mkdir /root/.ssh 
ADD ssh.tar.gz /root/ 

# install some dependencies 
RUN apt-get update 
RUN apt-get install --y maven 
RUN apt-get install --y git 
RUN apt-get install --y subversion 

# background script 
ADD run.sh /root/run.sh 
RUN chmod +x /root/run.sh 

# expose port 8080 
EXPOSE 8080 


CMD ["/root/run.sh"] 

मैं डोकर के नवीनतम संस्करण का उपयोग कर रहा (डोकर संस्करण 1.0.0, 63fe64c/1.0.0 का निर्माण), इस डोकर में एक बग है या मैं अपने Dockerfile में कुछ याद आ रही है?

+1

हैं आप ['USER'] (http://docs.docker.com/reference/builder/#user) डॉकरफ़ाइल निर्देश से अवगत हैं? – icecrime

+1

नहीं, आप क्या सुझाव देते हैं कि मैं इसका उपयोग करता हूं? –

+0

क्या उपयोगकर्ता निर्देश का उपयोग करके डॉकरफ़ाइल के माध्यम से प्रमाण पत्र जेनरेट करना संभव होगा? –

उत्तर

46

आपको डॉकरफ़ाइल में su का उपयोग नहीं करना चाहिए, हालांकि आपको डॉकरफ़ाइल में USER निर्देश का उपयोग करना चाहिए।

डॉकरफ़ाइल निर्माण के प्रत्येक चरण में, एक नया कंटेनर बनाया गया है ताकि उपयोगकर्ता को आपके द्वारा किए गए कोई भी परिवर्तन अगले निर्माण चरण पर बने रहे।

उदाहरण के लिए:

RUN whoami 
RUN su test 
RUN whoami 

यह कहना कभी नहीं होगा उपयोगकर्ता test होगा के रूप में एक नए कंटेनर 2 Whoami पर पैदा की है। आउटपुट दोनों पर रूट होगा (जब तक कि आप निश्चित रूप से पहले से ही यूजर चलाते हैं)।

यदि फिर भी आप करते हैं:

RUN whoami 
USER test 
RUN whoami 

आप root तो test देखना चाहिए।

वैकल्पिक रूप से आप एक आदेश एक अन्य उपयोगकर्ता के रूप sudo के साथ कुछ के साथ की तरह

sudo -u test whoami 

चला सकते हैं लेकिन यह आधिकारिक समर्थित अनुदेश का उपयोग करना बेहतर लगता है।

+3

यह काम कर रहा है, यूजर जाने का सही तरीका प्रतीत होता है। –

+0

मैं यह सुनिश्चित करने के बारे में उत्सुक हूं कि पहले रन कमांड डॉकरफ़ाइल में सेट किए गए उपयोगकर्ता के लिए उपलब्ध हैं। [मेरे पास एक सवाल है] (http://stackoverflow.com/questions/36183585/how-can-one-influence-the-order-of-run-commands-in-a-dockerfile) जहां फ़ोल्डर्स और अनुमतियां पहले सेट की गईं 'उपयोगकर्ता' निर्देश के साथ दूसरे उपयोगकर्ता को स्विच करने के बाद रूट उपलब्ध नहीं है। –

-6

ऐसा करने का कोई वास्तविक तरीका नहीं है। नतीजतन, mysqld_safe जैसी चीजें असफल हो जाती हैं, और आप Mysql-server को डेबियन डॉकर कंटेनर में 40 हुप्स के माध्यम से कूदने के बिना इंस्टॉल नहीं कर सकते हैं .. अच्छा ... अगर यह रूट नहीं है तो यह बंद हो जाता है।

आप USER का उपयोग कर सकते हैं, लेकिन यदि आप रूट नहीं हैं तो आप इंस्टॉल नहीं कर पाएंगे।

+5

तो उपयोगकर्ता के बाद बदलें –

10

अन्य उत्तर के लिए एक अलग दृष्टिकोण के रूप में, उपयोगकर्ता को डॉकरफ़ाइल पर छवि निर्माण पर इंगित करने के बजाय, आप एक विशेष कंटेनर पर प्रति-आदेश आधार के रूप में कमांड लाइन के माध्यम से ऐसा कर सकते हैं।

docker exec साथ

है, जो उपयोगकर्ता खाते इंटरैक्टिव टर्मिनल का उपयोग करेगा निर्दिष्ट करने के लिए --user का उपयोग करें (कंटेनर चलना चाहिए और उपयोगकर्ता कंटेनरीकृत सिस्टम में मौजूद है):

docker exec -it --user [username] [container] bash 

देखें https://docs.docker.com/engine/reference/commandline/exec/

संबंधित मुद्दे