Как просто создать образ Docker из Dockerfile с помощью fabric8 docker-maven-plugin?
Вот определение плагина:
<plugin>
<groupId>io.fabric8</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>0.26.0</version>
<configuration>
<registry>000000000000.dkr.ecr.us-east-1.amazonaws.com/my-aws-registy-0000000000000:latest</registry>
<images>
<image>
<name>my-image</name>
<build>
<tags>
<tag>000000000000.dkr.ecr.us-east-1.amazonaws.com/my-aws-registy-0000000000000:latest</tag>
</tags>
<dockerFileDir>${project.build.directory}</dockerFileDir>
</build>
</image>
</images>
</configuration>
</plugin>
После фазы ресурса Dockerfile
копируется в target
, Когда я пытаюсь вызвать docker:build
цель, которую я получил:
[ERROR] Failed to execute goal io.fabric8:docker-maven-plugin:0.25.2:build (default-cli)
on project my-project: Execution default-cli of goal
io.fabric8:docker-maven-plugin:0.25.2:build failed: A tar file cannot include itself. -> [Help 1]
Что я хочу - просто выполнить docker build -t .
Команда через Maven без каких-либо целей упаковки / сборки / сборки плагина (или подцелей). Да, этот плагин имеет много возможностей, но мне нужно просто собрать Docker без каких-либо tar
архивирование и это должно быть сделано из target
папка.
Как это сделать???
1 ответ
Docker собирает все файлы, которые должны быть добавлены в образ, в tar-файл и отправляет его демону Docker для создания образа.
Плагин создает этот файл tar в подкаталоге target
папка (которая является вашей ${project.build.directory}
). Взятие целевой папки в качестве базы для подключаемого модуля docker неявно включает созданный tar-файл, поэтому вы получаете ошибку.
Что я делал в проекте, так это копировал все файлы, которые должны быть добавлены к изображению (ADD
/COPY
) и Dockerfile
к ${project.build.directory}/dockerfile
каталог, а затем создать изображение с помощью <dockerFileDir>${project.build.directory}/dockfile</dockerFileDir>
Почему бы вам не использовать exec-maven-plugin для вызова самого докера?
У меня была такая же проблема, как и у вас, и я обнаружил, что если я помещаю Dockerfile вне целевой папки, он работает, например
<dockerFile>${project.basedir}/Dockerfile</dockerFile>