Невозможно запустить './mvnw clean install' при создании образа докера на основе «openjdk: 8-jdk-alpine» для приложения Spring Boot

Я хотел бы создать приложение Spring Boot, используя оболочку maven, предоставляемую spring.io.starter внутри контейнера докеров. Мой Dockerfile:

FROM openjdk:8-jdk-alpine
# install bash --> commented because I just need /bin/sh which is already provided by the base image
#RUN apk add --no-cache bash
ENV APP_DIR /app
ENV APP app.jar
WORKDIR ${APP_DIR}
COPY . ${APP_DIR}
# ===> HERE THE PROBLEM
RUN /bin/sh -c "./mvnw clean install"
ENTRYPOINT ["java","-jar","chicowa-app.jar"]
EXPOSE 8080

У меня такая ошибка:

/bin/sh: ./mvnw: not found

После некоторых исследований я все еще не нашел решения. Моя версия докера Docker version 18.06.1-ce, build e68fc7a на Windows10 pro

Спасибо большое за вашу помощь.

РЕДАКТИРОВАТЬ

Решением было бы установить maven напрямую с RUN apk add --no-cache maven, но я хотел бы минимизировать размер образа.

Хм, какова ценность $ {APP_DIR}

maxm 10.10.2018 22:57
ENV APP_DIR /app это каталог, в который копируются все файлы.
akuma8 10.10.2018 22:59
Не удалось выполнить цель org.apache.maven.plugins
Не удалось выполнить цель org.apache.maven.plugins
Опишу, что когда я только начинал изучать Maven, у меня не получалось компилировать и упаковывать.
Blibli Automation Journey - Как захватить сетевой трафик с помощью утилиты HAR в Selenium 4
Blibli Automation Journey - Как захватить сетевой трафик с помощью утилиты HAR в Selenium 4
Если вы являетесь веб-разработчиком или тестировщиком, вы можете быть знакомы с Selenium, популярным инструментом для автоматизации работы...
2
2
6 784
7

Ответы 7

Если вы не запустите сценарий в том месте, где находится файл mvnw, он не будет работать.

Если ваш PATH установлен правильно и Maven был установлен в подходящем месте, достаточно просто удалить «./» перед командой.

RUN /bin/sh -c “mvnw clean install”

Если mvnw НЕ входит в ваш PATH, вы можете указать полный путь в своем скрипте (но помните, что Maven, вероятно, вызовет другие вещи, которые потребуют тех же изменений PATH).

Я удалил ./, но результат тот же. Я не хочу устанавливать Maven, так что вы имеете в виду, говоря "Если ваш PATH задан правильно, и Maven был установлен в подходящем месте ..."

akuma8 11.10.2018 18:39

Если вы не установили Maven, то mvnw не существует, и нет решения вашей проблемы, в том числе установки maven.

Don Simon 11.10.2018 19:00

Думаю, вы не поняли моего вопроса. Взгляните здесь на maven wrapperbaeldung.com/maven-wrapper

akuma8 11.10.2018 19:07

Я неправильно понял, сказав, что не уверен, почему на этой странице утверждается, что вам не нужно устанавливать maven. Инструкции по установке оболочки maven специально используют Maven. Без него вы не сможете добавить его в проект и получить необходимые файлы. cd your_project mvn -N io.takari: maven: wrapper Удачи.

Don Simon 11.10.2018 19:14

Я провел тест на своем ПК, я удалил MAVEN_HOME из PATH, запустил ./mvnw clean install в своем проекте, и он сработал. Так что автор этой страницы абсолютно прав.

akuma8 11.10.2018 19:22

Точно. На вашем ПК, на котором был установлен Maven, вы создали проект с Maven Wrapper. Если вы хотите настроить новый проект на новом компьютере, вам также необходимо установить оболочку maven в этом проекте. Команда для этого - команда maven.

Don Simon 11.10.2018 19:30

Если нам нужно установить maven перед запуском оболочки, она будет абсолютно бесполезна. Я думаю, это не имеет смысла.

akuma8 12.10.2018 10:47

Вы можете использовать maven, чтобы добавить оболочку в проект, затем удалить maven с вашего компьютера, а затем использовать maven-wrapper. Это можно было объяснить лучше.

Don Simon 12.10.2018 19:02

если вы уже настроили maven, вы можете запустить следующее: -

mvn clean install

Он легко создаст образ докера.

Мы экспериментировали с этой проблемой только в Windows 10 и смогли решить эту проблему, просто применив dos2unix.

dos2unix mvnw

У меня такая же проблема при сборке Dockerfile в Window 10. Это потому, что файл mvnw содержит CRLF (\ г \ п) в конце строки. Я открываю его с помощью Notepad ++ и использую «Найти \r\n» и «Заменить на \n» (с установленным флажком «Расширенный (\ n, \ r, ...)»). Вы можете использовать инструмент dos2unix для преобразования, как сказал @Juanan выше.

После этого сборка прошла без проблем.

Была такая же проблема, и замена окончаний строк работала безупречно. Спасибо.

andyfinch 06.03.2020 10:20

Если вы используете Windows, git может изменить окончание строки файла mvnw на CRLF. Если вы откроете файл в любом текстовом редакторе и сохраните его в LF, он, вероятно, сработает.

использовать

RUN chmod +x mvnw 

Перед использованием

./mvnw clean install 

это сделает ваш файл mvnw исполняемым

Это рабочее решение, так как я нигде не нахожу этого решения:

mvnw -version ошибка: java.security.InvalidAlgorithmParameterException: параметр trustAnchors должен быть непустой

Первопричина: Публичный сертификат maven отсутствует в хранилище доверенных сертификатов Java

Решения:

  1. скачать - листовой сертификат repo.maven.apache.org из https://repo.maven.apache.org и сохранить его как файл repo_maven.cer в формате base64
  2. Установите repo_maven.cer в cacerts (магазин доверенных сертификатов) keytool -import -keystore "... \ openjdk-8u41 \ jre \ lib \ security \ cacerts" -file "repo_maven.cer" -alias maven

Выход: mvnw -version Apache Maven 3.8.1 (05c21c65bdfed0f71a2f2ada8b84da59348c4c5d)

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