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>路径必须构建的上下文中; 您不能COPY../something / something,因为docker构建的第一步是将上下文目录(和子目录)发送到docker守护程序。
如果<src>是目录,则将复制目录的整个内容,包括文件系统元数据。注意:目录本身不会被复制,只是其内容被复制。
如果<src>是其他类型的文件,则会将其及其元数据一起单独复制。在这种情况下,如果<dest>以斜杠/结尾,则将其视为目录,并且其内容<src>将写入<dest>/base(<src>)。
如果<src>直接或由于使用通配符而指定了多个资源,则该资源<dest>必须是目录,并且必须以斜杠结尾/。
如果<dest>不以斜杠结尾,则将其视为常规文件,并将其内容<src>写入<dest>。
如果<dest>不存在,它将与路径中所有缺少的目录一起创建。