Docker忽略.dockerignore中的模式

我打算从docker图像中排除python生成的文件。 所以我在上下文目录的根目录下添加了.dockerignore

 # Ignore generated files *.pyc 

docker build忽略这一点,并复制整个目录树,如下所示:

 /contextdir/ |-- Dockerfile \-- src/ |-- a.py # this is copies - all right \-- a.pyc # this should be ignored, but is copied too. Why? 

最后,我明白了什么是诀窍。 出于某种原因,我无法find任何提及这一点,并没有find任何这样的构造Dockerfile例子,所以在这里logging。 对其他人来说是微不足道的?

https://docs.docker.com/engine/reference/builder/#/dockerignore-file中的引用没有清楚地表明像*.pyc这样的模式只在path的开头匹配,或者对于文件直接在上下文目录下, 但不能recursion 。 要使其以recursion方式工作,必须使用**/语法:

 # Ignore generated files **/*.pyc 

.dockerignore的文档声明模式匹配使用了Go的文件path匹配逻辑 。 该文档还涵盖了recursion模式:

除了Go的filepath.Match规则,Docker还支持一个特殊的通配符**,匹配任意数量的目录(包括零)。 例如,** / *。go将排除以所有目录中包含的.go结尾的所有文件,包括构build上下文的根目录。

Interesting Posts