39

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

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

这工作正常(我的用户在docker组中,所以我不需要 sudo)并将完成的.rpm文件放在当前目录中。问题是该文件是由root拥有的。

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

4

2 回答 2

11

您可以尝试创建(在自定义图像的 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.


问题 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用户。)

于 2015-05-05T11:54:20.923 回答
2

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
于 2015-05-05T11:52:36.337 回答