Docker在已安装的卷中以root身份创建文件

时间:2015-05-05 11:42:16

标签: docker file-ownership volumes

我使用Docker(1.3.1)在容器内构建RPM:

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

这很好(我的用户在docker组中,因此我不需要sudo)并在当前目录中删除已完成的.rpm文件。问题是该文件是由root拥有的。

我如何安排它以便创建文件由与我运行docker的用户共同拥有?

2 个答案:

答案 0 :(得分: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是否将/ build中的共享文件夹安装为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:101是您容器中UID:GID用户的www-data。)

答案 1 :(得分:1)

Docker以root用户身份运行,并且不知道您的用户在其虚拟环境中的位置(即使您已经在sudoers组中)。但是,您可以在构建可以随意调用的docker镜像时创建非root用户。

# 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