005-Dockerfile-COPY

本文详细解析了Docker中COPY指令的用法,包括两种语法格式、如何处理包含特殊字符的路径、以及如何从之前的构建阶段复制文件。同时,文章强调了COPY指令遵循的规则,如路径必须位于构建上下文中,以及目录复制的细节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

语法

语法 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()。

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

  • 如果不以尾部斜杠结束,则将其视为常规文件,的内容将写入。

  • 如果不存在,则会在其路径中创建所有缺少的目录。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值