Запуск mvn install из Dockerfile дает ошибку, но запуск изнутри контейнера успешен - PullRequest
0 голосов
/ 27 мая 2020

У меня есть проект по адресу https://github.com/picklu13/dockerbuildtest. Когда я запускаю docker-compose up --build из каталога builders, возникает ошибка сборки с "[ERROR] Указанная вами цель требует выполнения проекта, но в этом каталоге (/ app) нет POM. Убедитесь, что вы вызвали Maven из правильный каталог. -> [Справка 1] "

Теперь, если я закомментирую последнюю строку Dockerfile # RUN mvn clean package и запускаю docker-compose up --build, контейнер запускается. Затем я go в контейнер с docker exec -it <id> bash и запускаю mvn clean install, что успешно.

У меня вопрос, почему первая сборка завершилась неудачно без ошибки pom. xml, хотя она уже была.

Ответы [ 2 ]

2 голосов
/ 27 мая 2020

В первом случае вы запускаете build из каталога builders, но контекст , переданный в Docker, не содержит pom.xml (он содержит то, что находится в вашем текущем каталоге как на docker-compose инструкцию context: .)

Во втором случае up смонтирует каталог вашего проекта в app с:

 volumes:
      - ~/dockerbuildtest/:/app/

Это означает, что появится ~/dockerbuildtest/pom.xml в контейнере как /app/pom.xml. Запуск mvn из app теперь работает.

почему первая сборка завершилась неудачно без пометки. xml ошибка, хотя она уже была

Это было не присутствует: в первой сборке pom.xml не скопировано в ваш образ (см. Инструкцию COPY).

Вы можете убедиться, что ваш контекст содержит pom.xml, выполнив команду сборки из каталога root вашего проекта и указав Dockerfile, например:

    build:
      # will use current directory as build context
      # by running from your project's root dir, context will contain pom.xml
      context: .
      # path to Dockerfile is relative to where build command is run
      dockerfile: builders/Dockerfile

И скопируйте pom.xml в свой Dockerfile, например:

# [...]
WORKDIR /app

# copy pom.xml from context into image
COPY pom.xml /app/pom.xml

# run from /app directory which now contains a pom.xml, should work
RUN mvn clean package
1 голос
/ 27 мая 2020

Вы монтируете том, и я думаю, что к моменту загрузки контейнера указанный ресурс не находится в указанном месте из-за того, что том еще не загружен.

Вы можете попробовать не использовать том и вместо этого используйте команду COPY в вашем файле докеров, чтобы убедиться, что ресурс действительно находится в / app до запуска контейнера. КОПИЯ, чтобы узнать, действительно ли это проблема с объемом.

...