2015-03-10 10 views
15

ile çalışmıyor.

biz kök olmayan kullanıcının ana dizine bazı dosyaları kopyalamak için çalışıyoruz basit Dockerfile var düşünün:

FROM ubuntu:utopic 

ENV DEBIAN_FRONTEND=noninteractive 

RUN sed -i.bak 's/http:\/\/archive.ubuntu.com\/ubuntu\//mirror:\/\/mirrors.ubuntu.com\/mirrors.txt\//g' /etc/apt/sources.list 
RUN echo "deb http://repo.aptly.info/ squeeze main" >> /etc/apt/sources.list.d/_aptly.list 
RUN apt-key adv --keyserver keys.gnupg.net --recv-keys e083a3782a194991 
RUN apt-get update 
RUN apt-get install -y aptly 

RUN useradd -m aptly 
RUN echo aptly:aptly | chpasswd 

USER aptly 
COPY ./.aptly.conf $HOME/.aptly.conf 

COPY ./public.key $HOME/public.key 
COPY ./signing.key $HOME/signing.key 
RUN gpg --import $HOME/public.key $HOME/signing.key 

RUN aptly repo create -comment='MAILPAAS components' -distribution=utopic -component=main mailpaas 
CMD ["/usr/bin/aptly", "api", "serve"] 

Ben bu imaj yaratmak için çalışıyorum zaman ne olsun That:

$HOME boş gibi
...  
    Step 10 : USER aptly 
    ---> Running in 8639f826420b 
    ---> 3242919b2976 
    Removing intermediate container 8639f826420b 
    Step 11 : COPY ./.aptly.conf $HOME/.aptly.conf 
    ---> bbda6e5b92df 
    Removing intermediate container 1313b12ca6c6 
    Step 12 : COPY ./public.key $HOME/public.key 
    ---> 9a701a78d10d 
    Removing intermediate container 3a6e40b8593a 
    Step 13 : COPY ./signing.key $HOME/signing.key 
    ---> 3d4eb847abe8 
    Removing intermediate container 5ed8cf52b810 
    Step 14 : RUN gpg --import $HOME/public.key $HOME/signing.key 
    ---> Running in 6e481ec97f74 
    gpg: directory `/home/aptly/.gnupg' created 
    gpg: new configuration file `/home/aptly/.gnupg/gpg.conf' created 
    gpg: WARNING: options in `/home/aptly/.gnupg/gpg.conf' are not yet active during this run 
    gpg: keyring `/home/aptly/.gnupg/secring.gpg' created 
    gpg: keyring `/home/aptly/.gnupg/pubring.gpg' created 
    gpg: can't open `/home/aptly/public.key': No such file or directory 
    gpg: can't open `/home/aptly/signing.key': No such file or directory 
    gpg: Total number processed: 0 

görünüyor. Ama neden? Mutlak yolun $HOME yerine direk olarak yerleştirilmesi çok uygun değil. Eğer USER direktifini kullandığınızda, konteynerin içinde yeni komutları başlatmak için kullanılan kimliği etkiler

:

+2

Bunun bir hata olduğunu düşünmüyorum. $ HOME normalde inandığım kabuk tarafından ayarlandı ve Dockerfile'ın içinde bir kabuk yok. Her zaman ENV HOME/home/aptly' yapabilirsiniz ve yukarıdakiler işe yarayacaktır. –

cevap

21

İşte senin sorunun. Yani, örneğin, bunu yaparsanız:

FROM ubuntu:utopic 
RUN useradd -m aptly 
USER aptly 
RUN echo $HOME 

Bu:

Step 4 : RUN echo $HOME 
---> Running in a5111bedf057 
/home/aptly 

RUN komutları önceki USER yönergesi tarafından değiştirildiğinde bir kap, içinde yeni bir kabuk başlatır çünkü.

COPY yönergesini kullandığınızda, kapsayıcının içinde bir işlem başlatmazsınız ve Docker'ın (varsa) ortam değişkenlerinin bir kabuk tarafından açığa çıkacağını bilme yolu yoktur.

Yapabileceğiniz en iyi şey de işe veya sonra geçici bir yer ve dosyalarınızı sahneye koyacak olan sizin Dockerfile içinde ENV HOME /home/aptly ayarlamaktır: Ayrıca

RUN cp /skeleton/myfile $HOME/myfile 

, hatırladın mı COPY dosyalar onlar olacak zaman o root tarafından sahip olunan; Bunları uygun kullanıcılara açıkça chown gerekir.

+2

'WORKDIR/home/aptly' da çalışır – kev

İlgili konular