Docker忽略.dockerignore中的模式

时间:2016-10-26 11:31:16

标签: docker ignore

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

# Ignore generated files
*.pyc

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

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

2 个答案:

答案 0 :(得分:30)

最后,我理解了诀窍。出于某种原因,我无法找到任何关于此的提及,并且未找到任何具有此类构造的示例Dockerfile,因此请在此处进行记录。对其他人来说是否微不足道?

https://docs.docker.com/engine/reference/builder/#/dockerignore-file处的引用并未明确说明*.pyc等模式仅在路径开头匹配,或者直接位于上下文目录下方的文件中 但不是递归。为了使其以递归方式工作,必须使用**/语法:

# Ignore generated files
**/*.pyc

答案 1 :(得分:1)

docs for .dockerignore表示模式匹配使用Go's filepath matching logic。文档还涵盖了递归模式:

  

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