Сборка Docker, добавляющая пустые каталоги при указании местоположения файла Dockerfile?

#docker #docker-compose #dockerfile

#docker #docker-compose #dockerfile

Вопрос:

Я сталкиваюсь с неожиданным поведением в Docker при создании образа с использованием файла Dockerfile из подкаталога контекста, из которого я создаю, т. Е.:

 docker build -t test -f build/docker/golang/Dockerfile .
  

Для удобства я удалил практически все из файла Dockerfile, за исключением следующего:

 FROM golang:1.12-alpine3.9 AS builder
RUN apk add tree
WORKDIR /build/dir
COPY . .
RUN tree -a
  

Затем с помощью .dockerignore из:

 *
!cmd
!pkg
  

Я запускаю и получаю следующий вывод:

 $ docker build --no-cache -f build/docker/golang/Dockerfile .
Sending build context to Docker daemon  10.75kB
Step 1/5 : FROM golang:1.12-alpine3.9 AS builder
 ---> d4953956cf1e
Step 2/5 : RUN apk add tree
 ---> Running in 20bbaf5ce5b9
fetch http://dl-cdn.alpinelinux.org/alpine/v3.9/main/x86_64/APKINDEX.tar.gz
fetch http://dl-cdn.alpinelinux.org/alpine/v3.9/community/x86_64/APKINDEX.tar.gz
(1/1) Installing tree (1.8.0-r0)
Executing busybox-1.29.3-r10.trigger
OK: 6 MiB in 16 packages
Removing intermediate container 20bbaf5ce5b9
 ---> f93961f78847
Step 3/5 : WORKDIR /build/dir
 ---> Running in e8637288cf26
Removing intermediate container e8637288cf26
 ---> 90473d72f983
Step 4/5 : COPY . .
 ---> aeec506ba056
Step 5/5 : RUN tree -a
 ---> Running in fa652d2cdf65
.
├── build
   └── docker
       └── golang
├── cmd
   ├── api
      └── main.go
   └── worker
       └── main.go
└── pkg
    └── math
        ├── math.go
        └── math_test.go

8 directories, 4 files
Removing intermediate container fa652d2cdf65
 ---> ef761dfd7e4e
Successfully built ef761dfd7e4e
  

Итак, на мой вопрос: что дает пустые, но существующие build/docker/golang каталоги? Я могу поместить в них материал, ничего не проходит, Dockerfile там нет, но каталоги существуют… пусто .. издеваешься надо мной.

Этого не происходит, если я перемещаю Dockerfile в корень проекта (т. Е. docker build . , но на самом деле это не решает мою проблему и не подходит для нужд этого проекта.

Комментарии:

1. Какую версию Docker вы используете? Я попробовал ту же команду, и все файлы скопированы. Возможно, это как-то связано с разрешениями или в используемой вами версии Docker может быть ошибка.

2. Серверная и клиентская версии 18.09.3

3. Пробовал с той же версией сервера и клиента. Все работает нормально. Проверьте, есть ли у вас .dockerignore и не включены ли в него файлы или папки.

4. Как я прокомментировал, dockerignore выглядит так, как показано, я даже с трудом его воспроизвел. Просто имея файл Dockerfile в подкаталогах, они продолжают добавляться в сборку пустыми

5. @syntaqx вы решили свою проблему? Я столкнулся с той же проблемой.