Я извлек файл сборки моего приложения, используя режим layertools
jar.
(ссылка https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#container-images.dockerfiles)
В результате четыре файла были извлечены следующим образом.
application
dependencies
snapshot-dependencies
spring-boot-loader
Затем в том же каталоге я попытался запустить приложение, выполнив следующую команду:
$java org.springframework.boot.loader.JarLauncher
Однако произошла ошибка.
java.lang.ClassNotFoundException: org.springframework.boot.loader.JarLauncher
MANIFEST.MF
заключается в следующем.
Manifest-Version: 1.0
Main-Class: org.springframework.boot.loader.JarLauncher
Start-Class: com.henry.myproject.HelloApplicationKt
Spring-Boot-Version: 2.6.4
Spring-Boot-Classes: BOOT-INF/classes/
Spring-Boot-Lib: BOOT-INF/lib/
Spring-Boot-Classpath-Index: BOOT-INF/classpath.idx
Spring-Boot-Layers-Index: BOOT-INF/layers.idx
Почему возникает эта ошибка?
Каждый из четырех каталогов предназначен для использования в качестве отдельного слоя в образе Docker. Их нужно скопировать в один каталог. В Dockerfile это будет выглядеть так:
COPY --from=builder application/dependencies/ ./
COPY --from=builder application/spring-boot-loader/ ./
COPY --from=builder application/snapshot-dependencies/ ./
COPY --from=builder application/application/ ./
Затем приложение можно запустить из каталога, в который были скопированы слои.
Четыре каталога — это четыре отдельных каталога. Содержимое четырех каталогов необходимо объединить в один каталог. Это то, что делают приведенные выше команды копирования при создании образа Docker. Если вы хотите запустить его на локальном компьютере, вам придется сделать то же самое и там.
Я не объединял содержимое четырех каталогов в один каталог. При объединении в один каталог работает нормально. Спасибо за вашу помощь !
Я хочу запустить его на локальном хосте, прежде чем применять его к докеру. Четыре каталога (dependencise, spring-boot-loader..) уже находятся в одном каталоге. Проблема в том, что программа запуска jar не может быть найдена и запущена.