我正在对接一个基于 PHP 的应用程序。我有一个 nginx 容器,其中包含.js,.html和.css文件以及所有资产。对于 PHP 代码,我使用的是由 nginx 服务器代理的专用PHP 映像。我只想.php在那个 PHP 图像中有文件,没有任何资产或公共文件。
为了使生成的图像尽可能小,但仍能轻松维护复制到我的图像中的文件,我想使用.dockerignore 白名单模式。不知何故,我不能忽略所有文件并对特定文件类型的任何目录中的文件进行例外处理。
在我的特殊情况下,我想默认忽略任何文件。然后,我想“允许” php 文件。这些嵌套在子目录中。如果以其他方式找不到这些文件,则看起来它们.dockerigone不会在忽略的目录中捕获这些文件。
我.dockerignore的位于app/。
情况1
考虑以下目录结构:
app
├── index.php
├── controllers
│ ├── controller-1.php
│ ├── controller-2.php
│ └── controller-3.php
└── models
├── index.php
├── checkout
│ ├── model-1.php
│ ├── model-2.php
│ └── model-3.php
├── profile
│ ├── model-1.php
│ ├── model-2.php
│ └── model-3.php
└── registration
├── model-1.php
├── model-2.php
└── model-3.php
以及以下.dockerignore文件:
# Ignore all files by default.
**
!**/*.php
该容器将包含以下文件:
app
└── index.php
案例2
使用更具描述性.dockerignore将显示子目录:
# Ignore all files by default.
**
!controllers/*.php
!models/*.php
但仍然没有达到预期的结果:
app
├── index.php
├── controllers
│ ├── controller-1.php
│ ├── controller-2.php
│ └── controller-3.php
└── models
└── index.php
案例3
但是,如果 Docker 守护进程知道目录,它可以在这些目录中工作,但只能在这些目录中工作:
# Ignore all files by default.
**
!**/*.php
!models/checkout/model-1.php
将导致:
app
├── index.php
└── models
├── index.php
└── checkout
├── model-1.php
├── model-2.php
└── model-3.php
问题
有谁知道如何解决这个问题?我知道我正在做的事情可能有点特别,但不知怎的,我希望能像那样工作。专门列出我想要包含的所有目录的解决方法。不过,相反的方式效果很好(不包括任何目录中的特定文件类型,如**/.DS_STORE)。如果没有逻辑错误并且没有明确的解决方案,我会在 GitHub 上提交一个错误。提前致谢。否则,我想扩展 Docker 的文档。