File 构建docker映像的文件所有权

File 构建docker映像的文件所有权,file,docker,file-permissions,File,Docker,File Permissions,我想为添加到docker映像的文件设置文件权限。我有一个简单的Dockerfile: FROM ubuntu:utopic WORKDIR /app RUN groupadd -g 1000 baz && useradd -u 1000 -g baz baz -d /app -s /bin/false RUN chown baz:baz /app && chmod g+s /app # want this to be have group baz ADD foo

我想为添加到docker映像的文件设置文件权限。我有一个简单的Dockerfile:

FROM ubuntu:utopic

WORKDIR /app
RUN groupadd -g 1000 baz && useradd -u 1000 -g baz baz -d /app -s /bin/false
RUN chown baz:baz /app && chmod g+s /app
# want this to be have group baz
ADD foo /app/
使用
docker build-t abc构建此文件。
中有
foo
文件时,会创建一个图像。但是,内部
/app/foo
上的权限不是我想要的

docker run abc ls -la     
total 12
drwxr-xr-x  2 baz  baz  4096 Sep  2 23:21 .
drwxr-xr-x 37 root root 4096 Sep  3 07:27 ..
-rw-rw-r--  1 root root  419 Sep  2 21:43 foo
请注意,文件
foo
不属于组
baz
,尽管已在
/app
目录中设置。我可以在添加文件后使用
运行chown-rbaz:baz/app
,但这会导致创建层的副本(请注意下面两个层的大小):


是否有办法绕过此问题,并将文件的所有权添加到我想要的位置?

您可以将其打包为tar存档并设置特定UID/GID的权限,而不是直接添加
foo
。以下是一篇关于如何做到这一点的帖子:


之后,您只需在Docker映像中卸载它(
ADD
untars自动卸载)。您应该看到保留的权限没有附加层

输出
-rw-rw-r--1 baz baz 419 Sep 2 21:43 foo
是否表明
foo
属于组
baz
。这是从一次运行中得到的,在将foo文件添加到映像后,我将其添加到了chmod中。您不希望将所有权/组指定为单独的步骤/层是否有特殊原因?@AlexLynham主要是映像大小。在这个简单的例子中,这不是一个问题,但是如果我在图像
chown
中添加几个大文件,它们将创建一个与前面相同大小的层副本(如
docker history
命令所示)。是的,但是由于层的构建方式,图像大小肯定会保持不变,而不是增加?单个层(即图像)将是相同的,但最终图像(即所有图像的总和)将是相同的大小,就像第二个图像不存在一样?
docker history abc | head -n 3
IMAGE               CREATED              CREATED BY                                      SIZE                COMMENT
b95a3d798873        About a minute ago   /bin/sh -c chown -R baz:baz /app                419 B               
7e007196c116        About a minute ago   /bin/sh -c #(nop) ADD file:2b91d9890a9c392390   419 B