Dockerfile COPY 指令使用总结

二维码
| Dec 04, 2020 | 原创

COPY 命令从 docker build 运行的上下文目录下拷贝文件或目录至所在容器文件系统中目标路径下。语法格式如下:

COPY [--chown=<user>:<group>] <src>... <dest>
COPY [--chown=<user>:<group>] ["<src>",... "<dest>"]

同时拷贝多文件注意

同时拷贝多文件目录目标文件需要以 / 结尾,否则会报错,例如,如下 Dockerfile:

COPY file1 file2 /home/www/

上述的目标路径 /home/www/必须以 / 结尾,否则 Dockerfile 不会构建成功。但如果一次指令仅拷贝单个文件或目录,则不是必须要求:

COPY dir1 /home/dir1

上述命令会拷贝dir1 目录下所有的子文件到目标路径 /home/dir1 目录下,因为源目录仅一个,所以目标路径 home/dir1 并不需要以 / 结尾。

使用相对路径

如果目标路径是使用的相对路径,那么相对路径是相对于当前的工作目录,即 WORKDIR 指令配置的路径:

WORKDIR /home/www

COPY * ./

拷贝当前构建上下文下所有的文件以及子目录文件到 /home/www 工作目录下。如果 Dockfile 中未配置 WORKDIR 指令,那这时候 WORKDIR 默认路径为:/ 下:

# 拷贝文件到/目录下
COPY * ./

拷贝文件用户组

COPY 指令可以制定 --chown 参数来制定拷贝文件的所属用户和组,默认的文件用户组隶属于 root 用户。

RUN groupadd -r www && useradd -r -g www www

COPY --chown=www:www file1 .

# 最终结果
# -rw-rw-r-- 1 www www 0 Dec  2 16:36 file1

上述命令新建一个 www 用户组,然后使用该用户组作为文件隶属用户组,请一定确保配置所属用户组存在,如果不存在,需要先创建,方可使用

拷贝中间stage镜像文件

COPY 指令配合 --from 参数也拷贝 stage 镜像文件,但此时的源路径只能使用绝对路径,如:

COPY --from=compile /home/www/* .

上述命令从 compile 这个 stage 镜像中拷贝 /home/www/ 目录下的所有文件到当前镜像工作目录路径下。