COPY 指令
COPY
有两种形式:
COPY <src>... <dest>
COPY ["<src>",... "<dest>"] (this form is required for paths containing whitespace)
COPY
指令从 <src>
复制新文件或目录,并将它们添加到路径 <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>
路径必须位于构建的上下文中; 你不能知道 14 ../something / something,因为 docker 构建的第一步是将上下文目录(和子目录)发送到 docker 守护进程。 -
如果
<src>
是目录,则复制目录的全部内容,包括文件系统元数据。注意:不复制目录本身,只复制其内容。 -
如果
<src>
是任何其他类型的文件,它将与其元数据一起单独复制。在这种情况下,如果<dest>
以尾部斜杠/结束,则它将被视为目录,<src>
的内容将在<dest>/base(<src>)
中写入。 -
如果直接或由于使用通配符指定了多个
<src>
资源,则<dest>
必须是目录,并且必须以斜杠/
结尾。 -
如果
<dest>
没有以斜杠结尾,则它将被视为常规文件,<src>
的内容将在<dest>
中写入。 -
如果
<dest>
不存在,则会在其路径中创建所有缺少的目录。