Dockerfile中COPY指令未复制全部文件的原因及解决方法
问题原因
问题和COPY指令的写法没有任何关系,核心诱因是zipkin源码根目录自带了预置规则的.dockerignore文件。
执行docker build时,Docker会优先读取构建上下文(即执行build命令时指定的根目录,此处为zipkin仓库根目录)下的.dockerignore文件,按照规则过滤要发送给Docker守护进程的文件:被匹配规则命中的文件不会进入构建上下文,后续无论怎么调整COPY指令的写法,都无法读取到这部分被过滤的文件。
zipkin官方仓库的.dockerignore是为官方镜像构建流程配置的,默认仅保留目录结构、xml类文件,其余源码、脚本、配置等类型的文件全部被加入忽略列表,因此容器内最终只会看到目录和xml文件,其余文件全部缺失。
修复方案
任选一种方案即可解决问题:
- 方案1(最简便):直接修改或删除zipkin根目录下的
.dockerignore文件。如果不需要特殊过滤规则,直接清空文件内容或者删除文件后,重新执行docker build -t abc .命令构建镜像,所有文件就会被正常复制到容器内。 - 方案2(不修改原仓库配置):构建时通过参数显式指定空的忽略规则文件,跳过原目录下的
.dockerignore加载。直接在zipkin根目录执行如下构建命令即可:
该命令不会加载任何忽略规则,所有文件都会正常进入构建上下文,被docker build -t abc --ignore-file /dev/null .COPY指令完整复制到镜像内。
内容的提问来源于stack exchange,提问作者Amin Ba
相关产品推荐
相关产品推荐

