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>
不存在,那么会创建所有的缺失的目录在路径当中。