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

Dan*_*ola 8 docker

我在处理该文件时遇到了问题.dockerignore。这是我的项目结构:

file.sh
file.js
file.go
file.py
subdir/
    file2.go
    file2.py
.dockerignore
Dockerfile
Run Code Online (Sandbox Code Playgroud)

根据.dockerignore文档

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

和:

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

最后:

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

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

# ignore everything
*

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

# python files
!**/*.py
Run Code Online (Sandbox Code Playgroud)

当我构建并运行容器并检查文件时,我得到以下信息:

file.py
Run Code Online (Sandbox Code Playgroud)

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

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

file.py
subdir/
    file2.py
Run Code Online (Sandbox Code Playgroud)

这里发生了什么?

Dan*_*ola 7

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

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

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