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)。 您应该可以看到保留的权限,而无需额外的图层。