我打算从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?
答案 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结尾的所有文件,包括构建上下文的根。