игнорировать все папки .git в .dockerignore - PullRequest
0 голосов
/ 20 февраля 2019

У меня есть проект с несколькими клонами git, в каждой папке будет свой .git, а в какой-то папке есть клоны внутри папок

Так что можно игнорировать все папки .git?

Я проверил много правил, как описано в документации, но мне удалось игнорировать только в верхней папке.

1 Ответ

0 голосов
/ 20 февраля 2019

Достаточно использовать шаблон **.Например:

.dockerignore

**/.git

Соответствующий отрывок из этой страницы официального документа :

.dockerignore file

[…]

Сопоставление выполняется с использованием правил Go filepath.Match .На этапе предварительной обработки удаляются начальные и конечные пробелы и удаляются элементы . и .. с помощью Go's filepath.Clean .Строки, которые остаются пустыми после предварительной обработки, игнорируются.

Помимо правил filepath.Match, Docker также поддерживает специальную строку подстановки **, которая соответствует любому количеству каталогов (включая ноль).Например, **/*.go исключит все файлы, которые заканчиваются на .go, которые находятся во всех каталогах, включая корень контекста сборки.

[…]

Рабочаяпример

Вот полный сеанс с Docker CE под Debian GNU / Linux:

$ docker version
Client:
 Version:           18.09.2
 API version:       1.39
 Go version:        go1.10.6
 Git commit:        6247962
 Built:             Sun Feb 10 04:13:52 2019
 OS/Arch:           linux/amd64
 Experimental:      false

Server: Docker Engine - Community
 Engine:
  Version:          18.09.2
  API version:      1.39 (minimum version 1.12)
  Go version:       go1.10.6
  Git commit:       6247962
  Built:            Sun Feb 10 03:42:13 2019
  OS/Arch:          linux/amd64
  Experimental:     false

Рассмотрим следующий рабочий каталог:

$ tree -a
.
├── a
│   ├── .git
│   │   └── c
│   └── go
│       └── 1
├── b
│   ├── c
│   │   ├── .git
│   │   │   └── c
│   │   └── go
│   │       └── 1
│   ├── .git
│   │   └── c
│   └── go
│       └── 1
├── Dockerfile
├── .dockerignore
├── .git
│   └── c
└── go
    └── 1

И следующие исходные файлы:

$ cat .dockerignore
**/.git

$ cat Dockerfile
FROM debian

WORKDIR /app

COPY . .

CMD ls -Rhal

Тогда я получаю:

$ docker build -t test .
[…]

$ docker run --rm -it test 
.:
total 28K
drwxr-xr-x 1 root root 4.0K Feb 20 19:40 .
drwxr-xr-x 1 root root 4.0K Feb 20 19:43 ..
-rw-r--r-- 1 root root    8 Feb 20 19:38 .dockerignore
-rw-r--r-- 1 root root   50 Feb 20 19:40 Dockerfile
drwxr-xr-x 3 root root 4.0K Feb 20 19:39 a
drwxr-xr-x 4 root root 4.0K Feb 20 19:39 b
drwx------ 2 root root 4.0K Feb 20 19:40 go

./a:
total 12K
drwxr-xr-x 3 root root 4.0K Feb 20 19:39 .
drwxr-xr-x 1 root root 4.0K Feb 20 19:40 ..
drwxr-xr-x 2 root root 4.0K Feb 20 19:39 go

./a/go:
total 8.0K
drwxr-xr-x 2 root root 4.0K Feb 20 19:39 .
drwxr-xr-x 3 root root 4.0K Feb 20 19:39 ..
-rw-r--r-- 1 root root    0 Feb 20 19:39 1

./b:
total 16K
drwxr-xr-x 4 root root 4.0K Feb 20 19:39 .
drwxr-xr-x 1 root root 4.0K Feb 20 19:40 ..
drwxr-xr-x 3 root root 4.0K Feb 20 19:39 c
drwxr-xr-x 2 root root 4.0K Feb 20 19:39 go

./b/c:
total 12K
drwxr-xr-x 3 root root 4.0K Feb 20 19:39 .
drwxr-xr-x 4 root root 4.0K Feb 20 19:39 ..
drwxr-xr-x 2 root root 4.0K Feb 20 19:39 go

./b/c/go:
total 8.0K
drwxr-xr-x 2 root root 4.0K Feb 20 19:39 .
drwxr-xr-x 3 root root 4.0K Feb 20 19:39 ..
-rw-r--r-- 1 root root    0 Feb 20 19:39 1

./b/go:
total 8.0K
drwxr-xr-x 2 root root 4.0K Feb 20 19:39 .
drwxr-xr-x 4 root root 4.0K Feb 20 19:39 ..
-rw-r--r-- 1 root root    0 Feb 20 19:39 1

./go:
total 8.0K
drwx------ 2 root root 4.0K Feb 20 19:40 .
drwxr-xr-x 1 root root 4.0K Feb 20 19:40 ..
-rw-r--r-- 1 root root    0 Feb 20 19:40 1
...