docker ADD --chown 是一个错误还是特性?

7

我在使用 --chown 标志将文件添加到映像并设置所有权时遇到了问题。具体来说,以下是添加简单文本文件的 Dockerfile:

FROM fedora:24

ARG user_name=slave
ARG user_uid=1000
ARG user_home=/home/$user_name/

RUN useradd -l -u ${user_uid} -ms /bin/bash $user_name

WORKDIR ${user_home}
USER ${user_name}
ADD --chown=1397765041:1397765041 test.txt ./
CMD ls -l

这导致预期拥有text.txt,如下所示:
$ docker run --rm -it bm/tmp:latest
total 4
-rw-r--r-- 1 some_user 1397765041 6 Oct 21 20:00 test.txt

很好。现在,如果我将test.txt更改为tar文件(例如boost_1_57_0.tar.bz2),并重新构建,这就是我得到的结果:

$ docker run --rm -it bm/tmp:latest
total 4
drwx------ 8 501 root 4096 Oct 31  2014 boost_1_57_0

以下是我的构建方法(虽然可能并不重要):

docker build -t bm/tmp --build-arg user_name=some_user --build-arg user_uid=1397765041 .

我们可以看到,在这种情况下,所有权并不像预期的那样。似乎--chown的行为与上面展示的两种情况不同。我知道ADD会自动提取tar文件,但我不知道在文件是tar文件的情况下所有权是如何设置的。有人知道吗?


2
正如您所知,添加 RUN 命令只是为了设置所有权会创建一个新的(相对较大的)层来执行该命令。这是可以的。但鉴于 ADD 命令有一个 --chown 标志,人们期望该标志与输入类型无关地与 ADD 命令一起使用。目前,我正在docker外部提取tar文件,然后使用带有 --chown 标志的docker COPY - Perplexabot
1个回答

16

遗憾的是,ADD --chown 仅适用于常规文件。使用 tarball 的 ADD 将使用 tarball 中列出的所有权和权限。

解决方法:

  • 自己运行 tar 并使用 --owner/--owner-map/--group/--group-map 选项。
  • ADD 后运行 chown -R 命令。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接