2014-07-03 23 views
35

SSH sertifikalarını ayarlamak için kullanıcıyı tomcat7 kullanıcılarına değiştirmeye çalışıyorum.Docker resmindeki kullanıcıları root olmayan bir kullanıcıya geçirme

su tomcat7 yaptığımda hiçbir şey olmuyor.

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 

Ne geçici çalışıyorum şudur:

whoami hala açıkça bir tomcat7 kullanıcı var olduğunu göstermektedir şu sonuç almak, bir more /etc/passwd yaparak su tomcat7

yaptıktan sonra kök ruturns Hudson hatası:

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

Bu benim Dockerfile'ım, varolan bir hudson savaş dosyasını al nd yapılandırılmış ve bir görüntü oluşturur, hudson iyi çalışır, sadece kullanıcı tomcat7 için mevcut olmayan sertifikalar nedeniyle git erişemez.

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"] 

Ben, bu Docker bir hata olduğunu (63fe64c/1.0.0 build Docker sürümü 1.0.0) ya da benim Dockerfile içinde bir şey eksik Docker son sürümünü kullanıyorum?

+1

Are bakınız: docker exec ile

, interaktif terminali kullanacak hangi hesap kullanıcı belirtmek için --user kullanmak (konteyner çalıştırıyor olmalıdır ve kullanıcı konteynerle sisteme varolması gerekir) [USER '] (http://docs.docker.com/reference/builder/#user) Dockerfile talimatının farkında mısınız? – icecrime

+1

Hayır, bunun için ne öneririm? –

+0

KULLANICI yönergesiyle Dockerfile üzerinden sertifika oluşturmak mümkün mü? –

cevap

46

Docker dosyasında su kullanmamalısınız, ancak Dockerfile'da USER yönergesini kullanmalısınız.

Dockerfile derlemesinin her aşamasında, kullanıcı için yaptığınız değişiklik sonraki oluşturma aşamasında kalmayacak şekilde yeni bir kap oluşturulur. Örneğin

:

RUN whoami 
RUN su test 
RUN whoami 

Bu yeni bir konteyner 2 whoami çatallanabilir gibi kullanıcı test olacağını söylemek asla. Çıkış her iki tarafta da kökü olacaktır (tabiki önceden USER'yi çalıştırmazsanız).

yapmanız ancak edin:

RUN whoami 
USER test 
RUN whoami 

Ardından testroot görmelisiniz.

Alternatif

sudo -u test whoami 

gibi bir şeyle sudo ile farklı bir kullanıcı olarak bir komut çalıştırabilir Ama resmi talimat desteklenen kullanmak iyi görünüyor.

+3

Çalışıyor, USER gitmek için doğru bir yol gibi görünüyor. –

+0

Daha önce çalıştır komutlarının Dockerfile'da ayarlanmış kullanıcı için mevcut olduğundan emin olmanızı istiyorum. [Bir sorum var] (http://stackoverflow.com/questions/36183585/how-can-one-influence-the-order-of-run-commands-in-a-dockerfile) daha önce belirlediği klasörler ve izinler root, "USER" talimatıyla başka bir kullanıcıya geçtikten sonra kullanılamaz. –

-6

Bunu yapmanın gerçek bir yolu yok. Sonuç olarak, mysqld_safe gibi şeyler başarısız olur ve mysql-server'ı bir Debian docker konteynerine 40 çemberin içinden atlamaksızın yükleyemezsiniz, çünkü ... iyi ... root değilse, iptal eder.

USER'yi kullanabilirsiniz, ancak root değilseniz apt-get'e sahip olmayacaksınız.

+5

Kullanıcıyı sonra değiştir –

10

Dockerfile üzerinde görüntü oluşturma üzerine kullanıcıyı göstermek yerine, diğer yanıtın farklı bir yaklaşımı olarak, komut başına-komut olarak belirli bir kaptaki komut satırı aracılığıyla bunu yapabilirsiniz.

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

https://docs.docker.com/engine/reference/commandline/exec/

İlgili konular