如何在Dockerfile中合并两条COPY指令
Docker COPY指令合并问题解答
先说明白:Docker的COPY指令不支持单条指令里同时指定多组“源文件-对应目标路径”的映射。你试的数组写法没用,是因为COPY的规则是:单条指令只能有一个目标路径,前面所有参数都算源文件/目录,最后都会复制到这个唯一的目标里。
你的写法为啥不行
你写的这条指令:
COPY ["./file1.txt", "/first/path/", "./file2.txt", "/second/path/"]
Docker会把./file1.txt、/first/path/、./file2.txt都当成要复制的源,然后往/second/path/里塞,这不仅不符合你的需求,还会因为/first/path/是容器内的路径(构建时可能还不存在)报错。
正确的处理办法
如果你是想减少镜像层数,其实Docker构建时会自动合并连续的COPY/ADD指令(只要上下文一致),所以分开写两条COPY根本不会多增加层数,反而更清晰易读:
COPY ./file1.txt /first/path/ COPY ./file2.txt /second/path/
要是非得用单条指令实现多路径复制,只能用RUN配合系统的cp命令,但这种方式会增加镜像层数,而且不如COPY高效(COPY是Docker原生支持,能用到构建缓存),示例如下:
RUN cp ./file1.txt /first/path/ && cp ./file2.txt /second/path/
总结:建议保留两条独立的COPY指令,既符合Docker语法规范,又能享受构建缓存的优势,代码可读性也更强。
内容的提问来源于stack exchange,提问作者Elias EbrahimPour
相关产品推荐
相关产品推荐

