40

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

# Ignore generated files
*.pyc

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

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

2 回答 2

100

最后,我明白了其中的诀窍。出于某种原因,我找不到任何提及这一点,也没有找到任何Dockerfile具有这种结构的示例,因此在此处记录。对其他人来说是微不足道的吗?

How to create a dockerignore file中的参考并不够清楚,*.pyc仅在路径的开头或上下文目录下的文件匹配模式,但不是递归的。为了使其递归工作,**/必须使用语法:

# Ignore generated files
**/*.pyc
于 2016-10-26T11:31:15.707 回答
9

.dockerignore的文档指出模式匹配使用Go 的文件路径匹配逻辑。文档还涵盖了递归模式:

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

于 2016-10-26T12:30:45.617 回答