语法
语法 1
COPY <src>... <dest>
语法 2
COPY ["<src>",..."<dest>"] (包含空格的路径需要这种格式)
作用 & 描述
COPY 指令从复制新文件或目录,并将它们添加到路径的容器的文件系统中;
可以指定多个资源,但它们必须相对于正在构建的源目录(构建的上下文);
每个能能包含通配符,匹配将使用 Go 的filepath.Match规则完成。例如:
COPY hom* /mydir # 添加所有以 hom 开头的文件
COPY hom?.txt /mydir # 添加以 hom 开头后加一个字母的文件
是绝对路径,或相对于 WORKDIR 的路径,源将在目标容器汇总复制到该路径中。
COPY test relativeDir/ # 将 test 文件添加到 `WORKDIR`/relativeDir/ 目录中
COPY test /absoluteDir/ # 将 test 文件添加到 /absoluteDir/ 目录中
复制包含特殊字符(例如[and])的文件或目录时,需要按照Golang规则转义这些路径,以防止它们被视为匹配模式。例如,要复制名为 arr[0].txt 的文件,请使用以下命令:
COPY arr[[]0].txt /mydir/ # 拷贝名为 "arr[0].txt" 文件到 /mydir/ 目录中
注意
如果使用 STDIN(docker build - < somefile)构建,则没有构建上下文,因此无法使用 COPY。
可选地,COPY接受一个标志–from = <name | index>,可用于将源位置设置为先前的构建阶段(使用FROM … AS 创建),而不是由发送的构建上下文 用户。 该标志还接受为使用FROM指令启动的所有先前构建阶段分配的数字索引。 如果找不到具有指定名称的构建阶段,则尝试使用具有相同名称的图像。
COPY遵守以下规则:
- 路径必须位于构建的上下文中; 你不能COPY …/something / something,因为docker构建的第一步是将上下文目录(和子目录)发送到docker守护进程。
- 如果是目录,则复制目录的全部内容,包括文件系统元数据。
注意:不复制目录本身,只复制其内容。
-
如果是任何其他类型的文件,则将其与元数据一起单独复制。 在这种情况下,如果以尾部斜杠/结尾,则将其视为目录,的内容将写入 / base()。
-
如果直接或由于使用通配符指定了多个资源,则必须是目录,并且必须以斜杠/结尾。
-
如果不以尾部斜杠结束,则将其视为常规文件,的内容将写入。
-
如果不存在,则会在其路径中创建所有缺少的目录。