我正在码头化一个基于PHP的应用程序。我有一个nginx容器,其中包含.js
,.html
和.css
文件以及所有资产。对于PHP代码,我使用了专用的PHP Image,它由nginx服务器代理。我只想在该PHP映像中有.php
个文件,而没有任何资产或 public 文件。
为了使生成的图像尽可能小,但仍然易于维护复制到图像中的文件,我想使用.dockerignore whitelist pattern。无论如何,我不能忽略所有文件,也不能为特定文件类型的任何目录中的文件设置例外。
在我的特殊情况下,默认情况下,我想忽略任何文件。然后,我想“允许” php文件。这些嵌套在子目录中。看来.dockerigone
不会在忽略的目录中捕获这些文件,如果没有找到。
我的.dockerignore
位于app/
中。
请考虑以下目录结构:
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
使用更具描述性的.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
但是,如果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的文档。