Я хочу уменьшить размер образа Docker, который должен содержать JDK 17 и мой app.jar. Я решил сделать это с помощью jlink, извлекая JDK, который будет включать только те модули, которые нужны моему приложению.
Основной процесс извлечения JDK выглядит следующим образом:
RUN jar xf ./target/app.jar
RUN jdeps --ignore-missing-deps --print-module-deps --multi-release 17 --recursive --class-path ./BOOT-INF/lib/* ./target/app.jar > modules.txt
RUN jlink --add-modules $(cat modules.txt) --strip-debug --no-man-pages --no-header-files --output jre-17
Он отлично работает на моем локальном компьютере (Windows 10), но не работает в Docker (openjdk:17-alpine). Я получаю эту ошибку:
------
> [auth build 7/8] RUN jdeps --ignore-missing-deps --print-module-deps --multi-release 17 --recursive --class-path ./BOOT-INF/lib/* ./target/app.jar > modules.txt:
5.271 Exception in thread "main" java.lang.module.FindException: Module jakarta.cdi not found, required by jakarta.transaction
5.347 at java.base/java.lang.module.Resolver.findFail(Resolver.java:893)
5.347 at java.base/java.lang.module.Resolver.resolve(Resolver.java:192)
5.347 at java.base/java.lang.module.Resolver.resolve(Resolver.java:141)
5.347 at java.base/java.lang.module.Configuration.resolve(Configuration.java:421)
5.350 at java.base/java.lang.module.Configuration.resolve(Configuration.java:255)
5.355 at jdk.jdeps/com.sun.tools.jdeps.JdepsConfiguration$Builder.build(JdepsConfiguration.java:564)
5.355 at jdk.jdeps/com.sun.tools.jdeps.JdepsTask.buildConfig(JdepsTask.java:603)
5.355 at jdk.jdeps/com.sun.tools.jdeps.JdepsTask.run(JdepsTask.java:557)
5.355 at jdk.jdeps/com.sun.tools.jdeps.JdepsTask.run(JdepsTask.java:533)
5.355 at jdk.jdeps/com.sun.tools.jdeps.Main.main(Main.java:49)
------
failed to solve: process "/bin/sh -c jdeps --ignore-missing-deps --print-module-deps --multi-release 17 --recursive --class-path ./BOOT-INF/lib/* ./target/app.jar > modules.txt" did not complete successfully: exit code: 1
Вот мой файл Docker:
# Build application
FROM openjdk:17-alpine AS build
# Install Maven
RUN apk update && apk add wget && apk add binutils
RUN wget https://dlcdn.apache.org/maven/maven-3/ ... bin.tar.gz \
&& tar -xzvf apache-maven-3.9.9-bin.tar.gz -C /opt/ \
&& rm apache-maven-3.9.9-bin.tar.gz
ENV PATH=$PATH:/opt/apache-maven-3.9.9/bin
WORKDIR /build
COPY . .
# RUN mvn clean package -DskipTests
RUN jar xf ./target/app.jar
RUN jdeps --ignore-missing-deps --print-module-deps --multi-release 17 --recursive --class-path ./BOOT-INF/lib/* ./target/app.jar > modules.txt
RUN RUN jlink --add-modules $(cat modules.txt) --strip-debug --no-man-pages --no-header-files --output jre-17
# Run application
FROM alpine:latest
WORKDIR /jre
COPY --from=build /build/jre-17 .
ENV JAVA_HOME /jre
ENV PATH=$PATH:$JAVA_HOME/bin
WORKDIR /app
COPY --from=build /build/target/app.jar .
CMD ["java", "-jar", "./app.jar"]
Что не так с моим Dockerfile?
pom.xml:
4.0.0
org.springframework.boot
spring-boot-starter-parent
3.3.2
Подробнее здесь: https://stackoverflow.com/questions/792 ... le-jakarta
Jdeps: исключение в потоке «основной» java.lang.module.FindException: модуль jakarta.cdi не найден, требуется jakarta.tr ⇐ JAVA
Программисты JAVA общаются здесь
1732305495
Anonymous
Я хочу уменьшить размер образа Docker, который должен содержать JDK 17 и мой app.jar. Я решил сделать это с помощью jlink, извлекая JDK, который будет включать только те модули, которые нужны моему приложению.
Основной процесс извлечения JDK выглядит следующим образом:
RUN jar xf ./target/app.jar
RUN jdeps --ignore-missing-deps --print-module-deps --multi-release 17 --recursive --class-path ./BOOT-INF/lib/* ./target/app.jar > modules.txt
RUN jlink --add-modules $(cat modules.txt) --strip-debug --no-man-pages --no-header-files --output jre-17
Он отлично работает на моем локальном компьютере (Windows 10), но не работает в Docker (openjdk:17-alpine). Я получаю эту ошибку:
------
> [auth build 7/8] RUN jdeps --ignore-missing-deps --print-module-deps --multi-release 17 --recursive --class-path ./BOOT-INF/lib/* ./target/app.jar > modules.txt:
5.271 Exception in thread "main" java.lang.module.FindException: Module jakarta.cdi not found, required by jakarta.transaction
5.347 at java.base/java.lang.module.Resolver.findFail(Resolver.java:893)
5.347 at java.base/java.lang.module.Resolver.resolve(Resolver.java:192)
5.347 at java.base/java.lang.module.Resolver.resolve(Resolver.java:141)
5.347 at java.base/java.lang.module.Configuration.resolve(Configuration.java:421)
5.350 at java.base/java.lang.module.Configuration.resolve(Configuration.java:255)
5.355 at jdk.jdeps/com.sun.tools.jdeps.JdepsConfiguration$Builder.build(JdepsConfiguration.java:564)
5.355 at jdk.jdeps/com.sun.tools.jdeps.JdepsTask.buildConfig(JdepsTask.java:603)
5.355 at jdk.jdeps/com.sun.tools.jdeps.JdepsTask.run(JdepsTask.java:557)
5.355 at jdk.jdeps/com.sun.tools.jdeps.JdepsTask.run(JdepsTask.java:533)
5.355 at jdk.jdeps/com.sun.tools.jdeps.Main.main(Main.java:49)
------
failed to solve: process "/bin/sh -c jdeps --ignore-missing-deps --print-module-deps --multi-release 17 --recursive --class-path ./BOOT-INF/lib/* ./target/app.jar > modules.txt" did not complete successfully: exit code: 1
Вот мой файл Docker:
# Build application
FROM openjdk:17-alpine AS build
# Install Maven
RUN apk update && apk add wget && apk add binutils
RUN wget https://dlcdn.apache.org/maven/maven-3/3.9.9/binaries/apache-maven-3.9.9-bin.tar.gz \
&& tar -xzvf apache-maven-3.9.9-bin.tar.gz -C /opt/ \
&& rm apache-maven-3.9.9-bin.tar.gz
ENV PATH=$PATH:/opt/apache-maven-3.9.9/bin
WORKDIR /build
COPY . .
# RUN mvn clean package -DskipTests
RUN jar xf ./target/app.jar
RUN jdeps --ignore-missing-deps --print-module-deps --multi-release 17 --recursive --class-path ./BOOT-INF/lib/* ./target/app.jar > modules.txt
RUN RUN jlink --add-modules $(cat modules.txt) --strip-debug --no-man-pages --no-header-files --output jre-17
# Run application
FROM alpine:latest
WORKDIR /jre
COPY --from=build /build/jre-17 .
ENV JAVA_HOME /jre
ENV PATH=$PATH:$JAVA_HOME/bin
WORKDIR /app
COPY --from=build /build/target/app.jar .
CMD ["java", "-jar", "./app.jar"]
Что не так с моим Dockerfile?
pom.xml:
4.0.0
org.springframework.boot
spring-boot-starter-parent
3.3.2
Подробнее здесь: [url]https://stackoverflow.com/questions/79216433/jdeps-exception-in-thread-main-java-lang-module-findexception-module-jakarta[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия