.dockerignore中排除的递归异常未按预期工作

时间:2020-03-24 14:58:20

标签: docker dockerfile dockerignore

我正在码头化一个基于PHP的应用程序。我有一个nginx容器,其中包含.js.html.css文件以及所有资产。对于PHP代码,我使用了专用的PHP Image,它由nginx服务器代理。我只想在该PHP映像中有.php个文件,而没有任何资产或 public 文件。

为了使生成的图像尽可能小,但仍然易于维护复制到图像中的文件,我想使用.dockerignore whitelist pattern。无论如何,我不能忽略所有文件,也不能为特定文件类型的任何目录中的文件设置例外。

在我的特殊情况下,默认情况下,我想忽略任何文件。然后,我想“允许” 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的文档。

0 个答案:

没有答案