Dockerfile中COPY命令通配符失效,无法复制tests子目录下bin文件夹
问题原因及解决方法
你的问题出在Docker COPY指令的通配符匹配规则理解上,Docker使用Go语言的filepath.Match规则处理通配符,同时需要注意上下文目录和路径匹配的细节:
错误原因
**tests/bin/:这个通配符会匹配任意深度路径中包含tests的目录,但你的目标路径是xxx.tests/bin,通配符和实际路径结构不匹配,无法命中目标目录。*.tests/bin/:理论上这个通配符能匹配根上下文下的xxx.tests目录,但Docker COPY在以目录作为源且使用通配符时,需要明确匹配目录内的内容,直接写*.tests/bin/可能无法正确解析为目录内的文件。
正确解决方法
方法一:直接指定每个测试目录(最可靠)
如果测试目录数量不多,直接逐个COPY是最不容易出错的方式:
COPY folder2.tests/bin/ /app/ COPY folder3.tests/bin/ /app/
方法二:使用正确的通配符匹配
调整通配符,明确匹配xxx.tests/bin下的所有内容:
COPY *.tests/bin/* /app/
这个指令会匹配根上下文下所有以.tests结尾的目录,将其bin子目录下的所有文件和子目录复制到/app中。
额外检查点
- 确保你是在
Folder目录下执行docker build .,Docker的上下文目录必须是包含Dockerfile和目标子目录的Folder,否则路径匹配会失效。 - 检查是否存在
.dockerignore文件,如果文件中包含bin、*.tests等规则,会导致COPY无法找到目标文件,需要删除或修改这些规则。
内容的提问来源于stack exchange,提问作者quldude
相关产品推荐
相关产品推荐

