Я сталкиваюсь с неожиданным поведением в 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 .
, но это на самом деле не решает мою проблему и не является вариантом для нужд этого проекта.