#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 копировал файлы на ваше изображение с хост-машины, он не смог найти подходящие (в отношении ваших подстановочных знаков) файлы для копирования. Я не вижу у вас целевого каталога — его нет на скриншотах, поэтому я не могу предложить ничего другого, но проблема есть. Не стесняйтесь прикреплять их и давайте исследовать вместе 🙂
Хорошего дня!