.dockerignore无法将文件包含在具有!** / *。extension模式

时间:2019-06-14 08:40:46

标签: docker

我在.dockerignore文件中遇到了麻烦。这是我的项目结构:

file.sh
file.js
file.go
file.py
subdir/
    file2.go
    file2.py
.dockerignore
Dockerfile

根据.dockerignore documentation

  

(...)您可能想要指定要包含在上下文中的文件,而不是要排除的文件。为此,将*指定为第一个模式,然后指定一个或多个!异常模式。

并且:

  

以!开头的行(感叹号)可用于排除例外。

最后:

  

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

基于此,这是我的.dockerignore文件:

# ignore everything
*

# whitelist
# ---------

# python files
!**/*.py

构建并运行容器并检查文件时,我得到了:

file.py

缺少subdir目录,应包含subdir/file2.py。如果我将!subdir/**/.py添加到我的.dockerignore中,它可以工作,但其想法是在任何子目录中包含任何.py文件。

这是容器中应该存在的文件结构:

file.py
subdir/
    file2.py

这是怎么回事?

1 个答案:

答案 0 :(得分:0)

我发现了一些提到此确切问题的问题,例如:

Exception patterns in .dockerignore do not support wildcard directories dockerignore does not respect the "special wildcard **"(评论)

似乎很快就不会解决了:(