Как просто создать образ 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>

Другие вопросы по тегам