我在使用.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 不尊重"特殊通配符**"(评论)
而且似乎它不会很快被修复:(