.dockerignore 无法在具有 !**/*.扩展名模式的子目录中包含文件



我在使用.dockerignore文件时遇到问题。这是我的项目结构:

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

根据.dockerignore文档:

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

和:

以 ! 开头的行(感叹号)可用于对排除项进行例外处理。

最后:

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

这是怎么回事?

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

.dockerignore 中的异常模式不支持通配符目录 Dockerignore 不尊重"特殊通配符**"(评论)

而且似乎它不会很快被修复:(

最新更新