COPY

COPY有两种形式:

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

COPY命令复制新的文件或者目录并把他们添加到容器的文件系统中的<dest> 路径下

可以指定多个<src> ,不过他们必须属于正在构建的上下文目录。

每个<src> 可以包含通配符,并且根据Go语言的filepath.Match 规则进行匹配。

例如:

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

<dest> 可以是绝对路径,或者是相对于WORKDIR 的路径,文件和目录会被复制到其中。

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

所有的文件和目录会被创建,并且UID和GID都为0。

注意 :如果你构建的时候是使用的 STDIN(docker build - < somefile),那这里是没有构建上下文的,所以COPY 是不能用的。

COPY 允许下面的规则:

  • src 路径必须是在构建的上下文当中,你不能使用COPY ../something /something ,因为docker build 的第一步是发送上下文目录(以及子目录)到docker daemon中。
  • 如果<src> 是一个目录,那整个目录中的内容会被复制,包括文件系统的元数据。

注意 :那个文件夹他本身不会被复制,只有里面的内容。

  • 如果<src> 是任何其他类型的文件,他将会与他的元数据一起被复制。在这种情况下,如果<dest> 中有结尾斜杠/ ,那么他会被当做一个文件夹,并且<src> 中的内容会被写入到<dest>/base(<src>)中。
  • 如果多个<src> 被指定了,不管是直接的指定还是使用通配符,那么<dest> 必须是一个目录,并且他必须有结尾 斜杠/
  • 如果<dest> 没有结尾斜杠,那么他会被当做一个文件,并且<src> 中的内容会被写到<dest> 当中。
  • 如果<dest> 不存在,那么会创建所有的缺失的目录在路径当中。

results matching ""

    No results matching ""