build立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 .构build这个docker build -t abc . 哪里有一个foo文件. 创build一个图像。 不过, /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 

请注意,尽pipe在/app目录中设置了setgid位 ,但文件foo不属于组baz 。 我可以在添加文件后使用RUN chown -R baz:baz /app ,但是会创build要创build的图层的副本(请注意下面两层的大小):

 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 

有什么方法可以解决这个问题,并增加文件的所有权是我想要的吗?

不要直接添加foo ,你可以将其打包为一个tar档案,并为特定的UID / GID设置权限。 这里是一个关于如何做到这一点的post: https : //unix.stackexchange.com/questions/61004/force-the-owner-and-group-for-the-contents-of-a-tar-file

之后,你可以在你的Docker镜像中解压缩( ADD自动parsing)。 您应该可以看到保留的权限,而无需额外的图层。