2016-11-26 02:02:43 +08:00
|
|
|
|
### COPY 复制文件
|
|
|
|
|
|
|
|
|
|
格式:
|
|
|
|
|
|
2018-11-02 08:26:50 +08:00
|
|
|
|
* `COPY [--chown=<user>:<group>] <源路径>... <目标路径>`
|
|
|
|
|
* `COPY [--chown=<user>:<group>] ["<源路径1>",... "<目标路径>"]`
|
2016-11-26 02:02:43 +08:00
|
|
|
|
|
|
|
|
|
和 `RUN` 指令一样,也有两种格式,一种类似于命令行,一种类似于函数调用。
|
|
|
|
|
|
|
|
|
|
`COPY` 指令将从构建上下文目录中 `<源路径>` 的文件/目录复制到新的一层的镜像内的 `<目标路径>` 位置。比如:
|
|
|
|
|
|
2019-10-29 14:31:45 +08:00
|
|
|
|
```docker
|
2016-11-26 02:02:43 +08:00
|
|
|
|
COPY package.json /usr/src/app/
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
`<源路径>` 可以是多个,甚至可以是通配符,其通配符规则要满足 Go 的 [`filepath.Match`](https://golang.org/pkg/path/filepath/#Match) 规则,如:
|
|
|
|
|
|
2019-10-29 14:31:45 +08:00
|
|
|
|
```docker
|
2016-11-26 02:02:43 +08:00
|
|
|
|
COPY hom* /mydir/
|
|
|
|
|
COPY hom?.txt /mydir/
|
|
|
|
|
```
|
|
|
|
|
|
2016-12-20 00:57:27 +08:00
|
|
|
|
`<目标路径>` 可以是容器内的绝对路径,也可以是相对于工作目录的相对路径(工作目录可以用 `WORKDIR` 指令来指定)。目标路径不需要事先创建,如果目录不存在会在复制文件前先行创建缺失目录。
|
2016-11-26 02:02:43 +08:00
|
|
|
|
|
|
|
|
|
此外,还需要注意一点,使用 `COPY` 指令,源文件的各种元数据都会保留。比如读、写、执行权限、文件变更时间等。这个特性对于镜像定制很有用。特别是构建相关文件都在使用 Git 进行管理的时候。
|
2018-11-02 08:26:50 +08:00
|
|
|
|
|
|
|
|
|
在使用该指令的时候还可以加上 `--chown=<user>:<group>` 选项来改变文件的所属用户及所属组。
|
|
|
|
|
|
2019-10-29 14:31:45 +08:00
|
|
|
|
```docker
|
2018-11-02 08:26:50 +08:00
|
|
|
|
COPY --chown=55:mygroup files* /mydir/
|
|
|
|
|
COPY --chown=bin files* /mydir/
|
|
|
|
|
COPY --chown=1 files* /mydir/
|
|
|
|
|
COPY --chown=10:11 files* /mydir/
|
|
|
|
|
```
|
2020-08-27 23:09:11 +08:00
|
|
|
|
|
|
|
|
|
如果源路径为文件夹,复制的时候不是直接复制该文件夹,而是将文件夹中的内容复制到目标路径。
|