Сборка Docker не работает — она не находит файл Dockerfile

#docker #intellij-idea #dockerfile #quarkus #docker-build

Вопрос:

Я пытаюсь создать контейнер quarkus с файлом docker, но похоже, что сборка docker не находит файл Docker. Я изменил имя файла Dockerfile, но в любом случае это не работает.

Я запускаю: docker build src/main/docker/собственный файл.dockerfile

И в этом есть ошибка:

  docker build src/main/docker/native.dockerfile
[ ] Building 0.1s (1/2)
 => ERROR [internal] load build definition from Dockerfile                                                                                                    0.0s
 => => transferring dockerfile: 97B                                                                                                                           0.0s
------
 > [internal] load build definition from Dockerfile:
------
failed to solve with frontend dockerfile.v0: failed to read dockerfile: error from sender: walk srcmaindockernative.dockerfile: System cannot find specified path. 

 

Вот отпечаток:

С принтами

Даже если я запущу с помощью intellij, это вызовет еще одну ошибку:

введите описание изображения здесь

Это файл dockerfile:

 FROM registry.access.redhat.com/ubi8/ubi-minimal
WORKDIR /work/
COPY target/*-runner /work/application
RUN chmod 775 /work
CMD ./application -Dquarkus.http.host=0.0.0.0 -Dquarkus.http.port=${PORT}

 

Что я делаю не так?

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

1. Аргумент to docker build -это имя каталога, а не имя файла; вам нужна docker build -f опция, если сценарий сборки не назван Dockerfile . Там, где вы говорите «это выдает ошибку», вы помещаете файл изображения вместо ошибки; можете ли вы заменить изображение фактическим выводом команды сборки?

2. @DavidMaze docker build -f по-прежнему не работает. Здесь есть ошибка: docker build -f src/main/docker/native.dockerfile "docker build" requires exactly 1 argument. See 'docker build --help'. Usage: docker build [OPTIONS] PATH | URL | - Build an image from a Dockerfile

Ответ №1:

Прежде всего, говоря о флаге-f, команда:

 docker build -f src/main/docker/native.dockerfile
 

не сработает, как вы упомянули, но я думаю, что для меня важно объяснить, почему. Причина в том, что вы не указали контекст сборки для файла Dockerfile. Когда вы печатаете что-то вроде этого:

 docker build src/main/docker/native.dockerfile
 

Он будет искать файл Dockerfile, называемый файлом Dockerfile, но файл src/main/docker/native.dockerfile будет выступать в качестве контекста сборки. Другими словами, когда вы копируете что-то в свой образ, docker должен понимать, откуда именно вы хотите копировать файлы/каталоги. Таким образом, вы можете присвоить файлу Dockerfile любое имя, какое захотите, просто помните о контексте сборки (он может быть относительным или абсолютным).

Теперь позвольте мне устранить ошибки, которые вы обнаружили 🙂

Грубо говоря, у вас 2 разные проблемы. Первый из них — когда вы бежали:

 docker build /build/context/path
 

docker engine не смог определить контекст. Я не использую docker в Windows, но я почти уверен, что это из-за разделителей. На вашем месте я бы просто изменил каталог (просто чтобы облегчить вам жизнь) на тот, который представляет ваш контекст сборки (я предполагаю, что это тот же каталог, где находится ваш файл Dockerfile), и просто запустил:

 docker build --file native.dockerfile .
 

Но вы получите проблему, которую вы получили в Intelij. Это совершенно другая проблема. Причина этого — когда docker копировал файлы на ваше изображение с хост-машины, он не смог найти подходящие (в отношении ваших подстановочных знаков) файлы для копирования. Я не вижу у вас целевого каталога — его нет на скриншотах, поэтому я не могу предложить ничего другого, но проблема есть. Не стесняйтесь прикреплять их и давайте исследовать вместе 🙂

Хорошего дня!