Развернуть .war-файл в Docker-контейнере: в app.war отсутствует основной атрибут манифеста - PullRequest
0 голосов
/ 03 сентября 2018

У меня есть .war-файл моего java-приложения, и я хотел бы развернуть его в док-контейнере.

Мой Dockerfile выглядит так:

FROM java:8
EXPOSE 8080
ADD /App.war app.war
ENTRYPOINT ["java", "-jar", "app.war"]

У меня есть App.war в том же каталоге.

Когда я хочу запустить его с помощью следующей команды:

docker run -p 8080:8080 -t app

выдает следующее исключение:

no main manifest attribute, in app.war

Однако, когда я проверяю app.war, в /META-INF/MANIFEST.MF есть манифест с указанием следующих параметров:

Manifest-Version: 1.0
Start-Class: com.package.app.AppMainClass
Spring-Boot-Classes: WEB-INF/classes/
Spring-Boot-Lib: WEB-INF/lib/
Spring-Boot-Version: 1.4.0.RELEASE
Main-Class: org.springframework.boot.loader.WarLauncher

Итак, насколько я понимаю, в сообщении об ошибке говорится, что в манифесте отсутствует атрибут Main-Class (что невозможно, поскольку он там есть). Я также попытался добавить реальный класс как Main-Class.

Это привело к той же ошибке.

Может кто-нибудь помочь мне вернуться на путь?

1 Ответ

0 голосов
/ 04 сентября 2018

Прежде всего, не создавайте проект весенней загрузки как WAR. Вам понадобится только WAR, если у вас есть какой-то старый древний проект, который вынудил вас развернуть приложение в контейнере веб-сервера / сервлета. Вам нужно будет удалить связанную с войной логику из вашего скрипта сборки.

Во-вторых. Убедитесь, что вы правильно строите проект. Если это gradle, вам нужно собрать его с ./gradlew build, для maven используйте mvn package. Это позволит упаковать ваш архив как uberjar - включая все необходимые зависимости и создать правильную структуру архива.

Более подробную информацию о том, как установить приложение для весенней загрузки в Docker , см. В руководствах пользователя .

Если и только если по каким-то странным причинам вам нужно собрать его как WAR и запустить его как исполняемый архив, убедитесь, что вы делаете это , используя war-плагин, предоставленный весенней загрузкой (не встроенный плагин войны). Это единственный способ создать исполняемый военный архив.

...