2015-05-05 12 views
13

root olarak dosyaları oluşturur: Bu iyi çalışırDocker Bir kabın içine BGBG'lerinizi inşa etmek Docker (1.3.1) kullanıyorum birimdeyse

docker run -v /home/matt/build:/build build-rpm /build/build-pkg.sh 

(benim kullanıcı docker grubunda, ben yani don Sudo'ya gerek yok) ve geçerli dizinde tamamlanmış bir .rpm dosyasını indirir. Sorun, dosyanın root'a ait olduğu şekilde oluşturulmuş olmasıdır.

Dosyayı, docker ile çalıştırdığım gibi aynı kullanıcıya ait olacak şekilde nasıl düzenleyebilirim?

+0

" Dosya olunan oluşturulur aynı kullanıcı tarafından docker ile çalıştırdığım gibi "Ama bu docker sanal ortamının köküdür, kullanıcının ne olduğunu bilmiyor. –

+1

bu soruya cevabımı bakın - Docker kapsayıcısında çalışan http://stackoverflow.com/questions/27925006/using-host-environment-variables-with-dockerfile – ISanych

+0

@PaulOliver işlemleri, ana bilgisayar kullanıcısının ne olduğunu bilmiyor tıpkı ana bilgisayarda nerede olduğunu bilmedikleri gibi sesi de monte ettim. Bununla birlikte, Docker ev sahibinin hacminin nerede yaşadığını belirtmeme izin veriyor; benzer şekilde, (ana bilgisayar) kullanıcı yeni dosyalarının nasıl oluşturulduğunu belirtebilir miyim? –

cevap

1

Docker, root olarak çalışır ve kullanıcınızın sanal ortamında (sudoers grubundaysanız bile) ne olduğu hakkında hiçbir fikri yoktur. Ancak docker resminizi oluştururken root kullanıcısı olmayan bir kullanıcı yaratabilirsiniz.

# create a non-root user named tester, 
# give them the password "tester" put them in the sudo group 
RUN useradd -d /home/tester -m -s /bin/bash tester && echo "tester:tester" | chpasswd && adduser tester sudo 

# start working in the "tester" home directory 
WORKDIR /home/tester 
COPY ./src 

# Make the files owned by tester 
RUN chown -R tester:tester /home/tester 

# Switch to your new user in the docker image 
USER tester 
+4

İçindekiler, kapsayıcının içinde ne kullanıcı olduğuna dair fikrinden pek de endişelenmiyorum. Ancak, ana bilgisayarın bakış açısından, dosyanın "docker run" komutunu başlatan kullanıcının sahibi olmasını istiyorum. Bu yaklaşım buna yardımcı olur mu? –

+0

Dosya, makinenize aynı UID ve GID ile kopyalanmadıkça size ait olmayacaktı. http://superuser.com/questions/580592/does-file-user-ownership-change-when-transferring-files-between-computers –

+0

Sanırım. Ben bir Vagrant VM'de '/ vagrant'ı manipüle etmek için kullanılan basit bir hikayeye alıştım: Dosyanın sahibinin sahiplerinin görünümü, sunucununkinden farklı. –

5

Bir kullanıcı (özel görüntünün Dockerfile olarak) oluşturmak ve docker run -v /home/matt/build:/build build-rpm bağlar paylaşılan klasör içinde olmadığını kontrol

RUN adduser --system --group --shell /bin/sh auser \ 
&& mkdir /home/auser/bin 
USER auser 

Sonra konteyner tarafından kullanılan olarak ayarlamak için deneyebilirsiniz/auser olarak oluşturun.


issue 2259 belirtilen Başka bir seçenek:

sen chown onu bağlamak montaj öncesi (ana bilgisayar tarafında) hacim, işe olacaktır. Bu durumda
, bunu yapabilirsiniz:

mkdir /tmp/www 
chown 101:101 /tmp/www 
docker run -v /tmp/www:/var/www ubuntu stat -c "%U %G" /var/www 

( 101:101 Kapsayıcınızda www-data kullanıcının UID:GID olduğunu varsayarsak.) böylece

+1

Ana klasörlerin (varsa) köke ait olduğuna dikkat edin. Örneğinizde, yoktur, ama bilmek güzeldir. –