2015-05-05 34 views
13

文件作为根我使用泊坞(1.3.1)建立一个容器内的RPM:码头工人创造了安装的卷

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

这工作正常(我的用户是docker组中,所以我不不需要sudo)并在当前目录中删除一个完整的.rpm文件。问题是该文件被创建为拥有的根。

如何安排它,以便在运行docker时由同一用户创建文件?

+0

“,使创建的文件将拥有的通过与我运行docker相同的用户“但是这是docker虚拟环境中的根,它不知道你的用户是什么。 –

+1

看到我对这个问题的回答 - http://stackoverflow.com/questions/27925006/using-host-environment-variables-with-dockerfile – ISanych

+0

@PaulOliver在Docker容器中运行的进程不知道我的主机用户是什么,就像他们不知道我在主机上安装音量的位置。但是,Docker确实让我指定了卷在主机上的位置;同样,我可以指定什么(主机)用户新文件被创建为? –

回答

1

Docker以root用户身份运行,并且不知道用户在其虚拟环境中的内容(即使您在sudoers组中)。但是你可以在创建一个非root用户的同时建立你可以随意调用的docker镜像。

# 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

我并不太担心容器对容器内的用户有何想法。但是,从主机角度来看,我希望文件最终由启动'docker run'命令的用户拥有。这种方法会对此有所帮助吗? –

+0

除非您使用相同的UID和GID将其复制回您的机器,否则该文件不会归您所有。 http://superuser.com/questions/580592/does-file-user-ownership-change-when-transferring-files-between-computers –

+0

我想。我已经习惯了简单的故事在Vagrant虚拟机上操作'/ vagrant':客户对文件所有者的看法与主机不同。 –

5

你可以尝试创建(在自定义图像的Dockerfile)的用户,并设置为使用的容器

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

然后检查是否有docker run -v /home/matt/build:/build build-rpm坐骑共享文件夹中的一个/构建为auser


issue 2259提到的另一种选择:

如果chown绑定安装前的体积(在主机端),它会工作。
在这种情况下,你可以这样做:

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

(假设101:101www-data用户在容器中的UID:GID

+1

请注意,父文件夹(如果有)将属于根目录。在你的例子中,没有,但它很好知道。 –

相关问题