【发布时间】:2015-11-28 14:01:59
【问题描述】:
我想为添加到 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
请注意,尽管在 /app 目录上设置了 the setgid bit,但文件 foo 不属于组 baz。添加文件后我可以使用RUN chown -R baz:baz /app,但这会导致要创建图层的副本(注意下面两个图层的大小):
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
有什么办法可以解决这个问题并让添加的文件的所有权成为我想要的吗?
【问题讨论】:
-
输出
-rw-rw-r-- 1 baz baz 419 Sep 2 21:43 foo不是表示foo属于组baz吗? -
@WaleedKhan 我粘贴了错误的输出。那是我在将 foo 文件添加到图像后
chmoded 的一次运行。 -
您是否有特殊原因不希望将所有权/组指定为单独的步骤/层?
-
@AlexLynham 主要是图像大小。在这种简单的情况下,这不是问题,但如果我在图像中添加一些大文件
chowning,它们将创建一个与之前大小相同的图层副本(如docker history命令中所示)。跨度> -
是的,但是由于层的构建方式,图像大小肯定会保持不变,而不是增加吗?单个图层(即图像)将是相同的,但作为所有图像总和的最终图像的大小将与第二个图像不存在时的大小相同?
标签: file docker file-permissions