ADD

ADD有两种形式:

  • ADD <src>... <dest>
  • ADD ["<src>",... "<dest>"](这种形式paths要包含空格)

ADD命令复制文件,目录或者URL中的远程文件从<src>当中,把他们添加到镜像的文件系统中,在<dest>位置。

多个<src>是允许的,但是如果他们是文件和目录的话,则他们必须要属于构建的源目录(build的上下文)。

每个<src>都可能包含通配符和匹配使用Go语言的filepath.Match 规则。

例如:

ADD hom* /mydir/        # adds all files starting with "hom"
ADD hom?.txt /mydir/    # ? is replaced with any single character, e.g., "home.txt"

<dest>是绝对路径,或者相对于WORKDIR的路径,源文件会被拷贝到目标容器的这个路径里。

ADD test relativeDir/          # adds "test" to `WORKDIR`/relativeDir/
ADD test /absoluteDir/         # adds "test" to /absoluteDir/

所有文件和目录创建时的UID和GID都是0。

<src>是URL的情况下,目标会拥有600的权限。如果远程文件被标记有HTTP的Last-Modified,目标文件的mtime会被设置为HTTP请求头中的时间戳。尽管,其他使用ADD处理的文件,mtime不会包含在目标处理中,不管那个文件是否改变或者cache应该要刷新。

注意:如果你build Dockerfile通过STDIN(docker build - < somefile),这里是没有上下文的,因此Dockerfile只能通过URL进行ADD。你也可以通过STDIN传入一个压缩文件(docker build - < archive.tar.gz),而存档的根目录将作为构建的上下文使用。

注意 :如果你的网址有认证保护,你需要用RUN wgetRUN curl或者其他工具来进行添加,而不是利用ADDADD不支持认证。

注意: 如果<src>中的内容已经更改,那么第一条ADD指令会使Dockerfile中以后的指令缓存无效,这同样会使RUN 指令的cache无效。参阅Dockerfile的最佳实践获取更多信息。

ADD遵守以下的规则:

  • <src>必须是build的上下文;你不能ADD ../something /something,因为docker build的第一步是发送上下文到docker daemon。
  • 如果<src>是一个URL并且<dest> 没有一个结尾斜杠,那么会把URL中的文件下载下来,然后复制到<dest>当中。
  • 如果<src>是一个URL并且<dest> 有一个结尾斜杠,那么文件名将会从URL中得出,并且下载到<dest>/<filename>。例如,ADD http://example.com/foobar / 会创建文件/foobar 。那个URL必须是一个有path的URL,从而能够推断出filename。(http://example.com 不会工作 )。
  • 如果<src>是一个目录,那整个目录的内容都会被下载下来,包括文件系统的元数据。

注意 :目录本身是不会复制的,只是他的内容。

  • 如果<src> 是一个本地tar格式,或者可以被识别的其他压缩格式(identity,gzip,bzip2或者xz)那么他会被解压成一个目录。远程URL中的资源是 会解压的。当一个目录被复制或者解压,他们会和tar -x有相同的行为,结果是下面的组合:

    ​ 1.无论目标目录存在什么

    ​ 2.根据目录的内容,一个一个文件的解决冲突。

    注意:文件是否被识别为压缩文件是根据文件的内容的决定的,而不是文件的名称。例如,一个空文件以.tar.gz 结尾是不会被识别为压缩文件的,同样不会产生任何的解压错误,而会直接将文件复制到目标目录。

  • 如果<src> 是其他类型的文件,他会带着他的元数据一起进行拷贝。在这种情况下如果<dest>/ 结尾,他会被当做一个目录,<src> 中的内容会被复制到<dest>/base(<src>)

  • 如果存在了多个<src> ,或者直接或间接的使用了通配符,那么<dest> 必须是一个目录,并且他必须以/ 结尾。

  • 如果<dest> 没有一个结尾斜杠,他会被当做一个常规的文件,并且<src> 中的内容会被写到<dest> 中。

  • 如果<dest> 不存在,那会在他的路径中创建所有缺少的目录。

results matching ""

    No results matching ""