使用openjdk:17构建Docker容器时出现apt-get命令未找到错误
解决
/bin/sh: apt-get: command not found错误 问题根源:openjdk:17官方默认镜像基于Alpine Linux,该发行版使用apk作为包管理器,而非Debian/Ubuntu系的apt-get。你之前用的adoptopenjdk:11-jdk是基于Debian构建的,所以能正常使用apt-get。
提供两种解决方式:
方式一:切换到Debian基础的OpenJDK镜像
将Dockerfile中的openjdk:17替换为基于Debian的OpenJDK镜像标签,比如openjdk:17-jdk或openjdk:17-slim,这样就能继续使用apt-get命令。
修改后的Dockerfile示例:
FROM openjdk:17-jdk as builder WORKDIR application ARG JAR_FILE=backend/build/libs/backend-*.jar COPY ${JAR_FILE} application.jar RUN java -Djarmode=layertools -jar application.jar extract FROM openjdk:17-jdk as runtime WORKDIR application RUN apt-get -y update && apt-get -y install fontconfig ttf-dejavu COPY --from=builder application/dependencies/ ./ COPY --from=builder application/spring-boot-loader/ ./ COPY --from=builder application/application/ ./ EXPOSE 8080 ENV _JAVA_OPTIONS "-Djava.security.egd=file:/dev/./urandom -Djava.awt.headless=true -Dfile.encoding=UTF-8 -Duser.timezone=GMT -Xverify:none -Djava.util.concurrent.ForkJoinPool.common.parallelism=16" ENTRYPOINT ["java", "-cp",".:BOOT-INF/lib/*:BOOT-INF/classes:/META-INF", "org.springframework.boot.loader.JarLauncher"]
方式二:使用Alpine的apk包管理器
如果坚持使用openjdk:17镜像,将apt-get相关命令替换为Alpine的apk命令:
修改runtime阶段的RUN指令:
RUN apk add --no-cache fontconfig ttf-dejavu
--no-cache参数能避免缓存包索引,减少镜像体积。
修改后的完整Dockerfile示例:
FROM openjdk:17 as builder WORKDIR application ARG JAR_FILE=backend/build/libs/backend-*.jar COPY ${JAR_FILE} application.jar RUN java -Djarmode=layertools -jar application.jar extract FROM openjdk:17 as runtime WORKDIR application RUN apk add --no-cache fontconfig ttf-dejavu COPY --from=builder application/dependencies/ ./ COPY --from=builder application/spring-boot-loader/ ./ COPY --from=builder application/application/ ./ EXPOSE 8080 ENV _JAVA_OPTIONS "-Djava.security.egd=file:/dev/./urandom -Djava.awt.headless=true -Dfile.encoding=UTF-8 -Duser.timezone=GMT -Xverify:none -Djava.util.concurrent.ForkJoinPool.common.parallelism=16" ENTRYPOINT ["java", "-cp",".:BOOT-INF/lib/*:BOOT-INF/classes:/META-INF", "org.springframework.boot.loader.JarLauncher"]
内容的提问来源于stack exchange,提问作者StefanoSKAL
相关产品推荐
相关产品推荐

