Рекурсивные исключения из исключений в .dockerignore не работают должным образом - PullRequest
3 голосов
/ 24 марта 2020

Я докеризую приложение на основе PHP. У меня есть контейнер nginx, содержащий файлы .js, .html и .css вместе со всеми активами. Для кода PHP я использую выделенный PHP образ , который проксируется сервером nginx. Я хотел бы иметь только .php файлы в этом PHP изображении без каких-либо ресурсов или publi c файлов.

Для того, чтобы полученное изображение было небольшим насколько это возможно, но все же легко поддерживать файлы, скопированные на моем изображении, я хочу использовать шаблон белого списка .dockerignore . Почему-то я не могу игнорировать все файлы и делать исключения для файлов в любом каталоге для определенного типа файла c.

В моем особом случае я хочу игнорировать любой файл по умолчанию. Затем я хотел бы разрешить 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

Case 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

Вопрос

У кого-нибудь есть идеи, как решить проблему? Я знаю, что то, что я делаю, может быть немного более особенным, но каким-то образом я ожидаю, что сработаю так. Обходной путь, чтобы конкретно перечислить все каталоги, которые я хотел бы включить. Тем не менее, обратный путь работает хорошо (исключая указанный тип файла c в любом каталоге, например **/.DS_STORE). Если нет ошибки logi c и нет четкого решения, я бы отправил сообщение об ошибке на GitHub. Заранее спасибо. В противном случае я хотел бы расширить документы Docker.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...