Я хотел бы создать приложение 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, но я хотел бы минимизировать размер образа.
ENV APP_DIR /app это каталог, в который копируются все файлы.


Если вы не запустите сценарий в том месте, где находится файл mvnw, он не будет работать.
Если ваш PATH установлен правильно и Maven был установлен в подходящем месте, достаточно просто удалить «./» перед командой.
RUN /bin/sh -c “mvnw clean install”
Если mvnw НЕ входит в ваш PATH, вы можете указать полный путь в своем скрипте (но помните, что Maven, вероятно, вызовет другие вещи, которые потребуют тех же изменений PATH).
Я удалил ./, но результат тот же. Я не хочу устанавливать Maven, так что вы имеете в виду, говоря "Если ваш PATH задан правильно, и Maven был установлен в подходящем месте ..."
Если вы не установили Maven, то mvnw не существует, и нет решения вашей проблемы, в том числе установки maven.
Думаю, вы не поняли моего вопроса. Взгляните здесь на maven wrapperbaeldung.com/maven-wrapper
Я неправильно понял, сказав, что не уверен, почему на этой странице утверждается, что вам не нужно устанавливать maven. Инструкции по установке оболочки maven специально используют Maven. Без него вы не сможете добавить его в проект и получить необходимые файлы. cd your_project mvn -N io.takari: maven: wrapper Удачи.
Я провел тест на своем ПК, я удалил MAVEN_HOME из PATH, запустил ./mvnw clean install в своем проекте, и он сработал. Так что автор этой страницы абсолютно прав.
Точно. На вашем ПК, на котором был установлен Maven, вы создали проект с Maven Wrapper. Если вы хотите настроить новый проект на новом компьютере, вам также необходимо установить оболочку maven в этом проекте. Команда для этого - команда maven.
Если нам нужно установить maven перед запуском оболочки, она будет абсолютно бесполезна. Я думаю, это не имеет смысла.
Вы можете использовать maven, чтобы добавить оболочку в проект, затем удалить maven с вашего компьютера, а затем использовать maven-wrapper. Это можно было объяснить лучше.
если вы уже настроили maven, вы можете запустить следующее: -
mvn clean install
Он легко создаст образ докера.
Мы экспериментировали с этой проблемой только в Windows 10 и смогли решить эту проблему, просто применив dos2unix.
dos2unix mvnw
У меня такая же проблема при сборке Dockerfile в Window 10.
Это потому, что файл mvnw содержит CRLF (\ г \ п) в конце строки. Я открываю его с помощью Notepad ++ и использую «Найти \r\n» и «Заменить на \n» (с установленным флажком «Расширенный (\ n, \ r, ...)»). Вы можете использовать инструмент dos2unix для преобразования, как сказал @Juanan выше.
После этого сборка прошла без проблем.
Была такая же проблема, и замена окончаний строк работала безупречно. Спасибо.
Если вы используете Windows, git может изменить окончание строки файла mvnw на CRLF. Если вы откроете файл в любом текстовом редакторе и сохраните его в LF, он, вероятно, сработает.
использовать
RUN chmod +x mvnw
Перед использованием
./mvnw clean install
это сделает ваш файл mvnw исполняемым
Это рабочее решение, так как я нигде не нахожу этого решения:
mvnw -version ошибка: java.security.InvalidAlgorithmParameterException: параметр trustAnchors должен быть непустой
Первопричина: Публичный сертификат maven отсутствует в хранилище доверенных сертификатов Java
Решения:
Выход: mvnw -version Apache Maven 3.8.1 (05c21c65bdfed0f71a2f2ada8b84da59348c4c5d)
Хм, какова ценность $ {APP_DIR}