Я пытаюсь использовать docker-maven-plugin
fabric8 для создания образов докеров в моем gitlab ci pipe.
Фон:
Мой этап создания изображения в gitlab-ci.yml
выглядит следующим образом:
build_image:
stage: build
image: $JAVA_IMAGE
services:
- name: docker:dind
alias: docker-build
script:
- ./mvnw docker:build
allow_failure: true
except: *nobuild
tags:
- autoscaler
Мой pom имеет
<plugin>
<groupId>io.fabric8</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>0.30.0</version>
<configuration>
<!-- the hostname should be the same as the service alias specified in the gitlab ci file-->
<dockerHost>tcp://docker-build:2375</dockerHost>
<images>
<image>
<name>my-image</name>
<build>
<contextDir>${project.basedir}/path/where/Dockerfile/lives</contextDir>
<filter>false</filter>
<tags>
<tag>latest</tag>
<tag>${project.version}</tag>
</tags>
</build>
</image>
</images>
</configuration>
</plugin>
И мой Dockerfile содержит
COPY ./some/directory/ /destination/path/within/image
Но сборка завершается с ошибкой
41014 [ERROR] DOCKER> Unable to build image [my-image] : "COPY failed: stat /var/lib/docker/tmp/docker-builder785340074/some/directory/: no such file or directory" ["COPY failed: stat /var/lib/docker/tmp/docker-builder785340074/some/directory/: no such file or directory" ]
Вопрос:
Кажется, проблема в том, что maven в контейнере, построенном из $JAVA_IMAGE
,использует демон docker контейнера docker:dind
(на tcp://docker-build:2375
) для сборки my-image
(как и предполагалось), но контейнер docker:dind
не имеет доступа к файлам на контейнере $JAVA_IMAGE
на ./some/directory/
.Есть ли способ предоставить ему доступ к этим файлам или скопировать эти файлы в контейнер docker:dind
?Или есть лучший способ сделать то, что я пытаюсь сделать (сохраняя разделение между образом службы docker:dind
и образом сборки $JAVA_IMAGE
)?