Docker 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>路径必须构建的上下文中; 您不能COPY../something / something,因为docker构建的第一步是将上下文目录(和子目录)发送到docker守护程序。

  • 如果<src>是目录,则将复制目录的整个内容,包括文件系统元数据。注意:目录本身不会被复制,只是其内容被复制。

  • 如果<src>是其他类型的文件,则会将其及其元数据一起单独复制。在这种情况下,如果<dest>以斜杠/结尾,则将其视为目录,并且其内容<src>将写入<dest>/base(<src>)。

  • 如果<src>直接或由于使用通配符而指定了多个资源,则该资源<dest>必须是目录,并且必须以斜杠结尾/。

  • 如果<dest>不以斜杠结尾,则将其视为常规文件,并将其内容<src>写入<dest>。

  • 如果<dest>不存在,它将与路径中所有缺少的目录一起创建。