如何从Docker容器复制文件至Dockerfile构建阶段?
从其他Docker容器复制文件到Dockerfile构建阶段的正确方法
你原来用COPY {container_id}:/some_file /var/root的写法行不通,因为Docker构建阶段是完全隔离的,COPY指令没法直接读取其他容器的文件系统。下面两种方法可以实现需求:
方法一:先导出文件到本地,再用Dockerfile复制
- 先通过
docker cp命令把容器里的文件复制到本地构建目录(也就是Dockerfile所在的文件夹):docker cp {container_id}:/some_file ./local_some_file - 然后修改Dockerfile,从本地复制文件到镜像:
FROM linux/optimize as building_stage COPY ./local_some_file /var/root
方法二:把容器提交为镜像,用多阶段构建复制
如果不想把文件导出到本地,可以先把目标容器打包成临时镜像:
- 提交容器为镜像:
docker commit {container_id} my_temp_image - 然后在Dockerfile里用
COPY --from从这个临时镜像复制文件:FROM linux/optimize as building_stage COPY --from=my_temp_image /some_file /var/root
注意:第二种方法会把整个容器的文件系统打包成镜像,如果容器里有很多冗余内容,可能会增大镜像体积,按需选择即可。
内容的提问来源于stack exchange,提问作者Patrick
相关产品推荐
相关产品推荐

