2015-05-05 15 views
13

Ich bin mit Docker (1.3.1) RPMs in einem Container zu bauen:Docker erstellt Dateien als root in hängten Datenträger

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

Dies funktioniert gut (meine Benutzer in der docker Gruppe, so dass ich don muss nicht sudo) und löscht eine vollständige .rpm Datei im aktuellen Verzeichnis. Das Problem besteht darin, dass die Datei im Besitz von root erstellt wird.

Wie kann ich es so arrangieren, dass die Datei im Besitz desselben Benutzers ist, mit dem ich docker leite?

+0

„, so dass die Datei owned erstellt von dem gleichen Benutzer wie ich docker mit "Aber das ist root in der virtuellen Docker-Umgebung, es weiß nicht, was Ihr Benutzer ist. –

+1

finden Sie meine Antwort auf diese Frage - http://StackOverflow.com/Questions/27925006/using-Host-Umgebung-Variablen-mit-dockerfile – ISanych

+0

@PaulOliver Prozesse im Docker-Container ausgeführt wissen nicht, was mein Host-Benutzer ist, genau wie sie nicht wissen, wo auf dem Host ich die Lautstärke montiert habe. Docker lässt mich jedoch angeben, wo auf dem Host das Volume lebt; Kann ich auch angeben, für welchen (Host-) Benutzer neue Dateien erstellt werden? –

Antwort

1

Docker läuft als root und hat keine Ahnung, was Ihr Benutzer in seiner virtuellen Umgebung ist (selbst wenn Sie in der Gruppe sudoers sind). Sie können jedoch einen Nicht-Root-Benutzer erstellen, während Sie Ihr Andock-Image erstellen, das wie auch immer Sie möchten, aufgerufen werden kann.

# 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

Ich bin nicht allzu besorgt über die Idee des Containers, welcher Benutzer es in dem Container ist. Aus der Sicht des Hosts möchte ich jedoch, dass die Datei dem Benutzer gehört, der den Befehl 'docker run' gestartet hat. Würde dieser Ansatz dabei helfen? –

+0

Die Datei gehört nicht Ihnen, es sei denn, Sie haben sie mit derselben UID und GID zurück auf Ihren Computer kopiert. http://superuser.com/questions/580592/does-file-user-ownership-change-when-transferring-file-between-computers –

+0

Ich denke. Ich bin es gewohnt, die einfache Geschichte "/ vagrant" auf einer Vagrant-VM zu manipulieren: Die Ansicht des Gastbesitzers auf die Datei unterscheidet sich von der des Gastgebers. –

5

Sie könnten versuchen, (in der Dockerfile eines benutzerdefinierten Bild) zu erstellen, einen Benutzer und legen Sie es als einen durch den Behälter verwendet

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

Dann überprüfen, ob ein docker run -v /home/matt/build:/build build-rpm Mounts den freigegebenen Ordner in/bauen als auser.


Eine weitere in issue 2259 erwähnt Option:

Wenn Sie chown das Volumen (auf der Seite Host), bevor es bind-Montage, wird es funktionieren.
In diesem Fall könnten Sie tun:

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

(Unter der Annahme, dass 101:101 die UID:GID der in Ihrem Container www-data Benutzer.)

+1

Achten Sie darauf, dass die übergeordneten Ordner (falls vorhanden) zu root gehören. In Ihrem Beispiel gibt es das nicht, aber es ist gut zu wissen. –