优先选 eclipse-temurin(如 eclipse-temurin:17-jre-jammy),因其轻量、定期更新CVE、支持ARM64;避免已弃用的 java:8 或体积大且无多阶段构建支持的 openjdk 官方镜像。
Java应用打包成Docker镜像时,Dockerfile里该用哪个JDK基础镜像
优先选 eclipse-temurin(原 adoptopenjdk),不是 openjdk 官方镜像,也不是 java:8-jdk 这类已弃用的旧标签。后者在 Docker Hub 上已标记为 deprecated,且不更新安全补丁。
常见错误是直接写 FROM openjdk:17-jdk-slim —— 它虽能跑,但镜像体积大、无多阶段构建支持、底层 OS 包管理混乱。而 eclipse-temurin:17-jre-jammy 更轻量、定期扫描 CVE、支持 ARM64。
-
eclipse-temurin:17-jre-jammy:适合 Spring Boot 打包成jar后直接运行,体积约 120MB -
eclipse-temurin:17-jdk-jammy:需要编译或调试时才用,比如集成 Jacoco 或运行javac - 避免
FROM java:8:该镜像基于 Debian Jessie,2020 年已 EOL,存在已知 SSL/TLS 握手失败问题
Spring Boot应用构建Docker镜像时,为什么java -jar启动失败报ClassNotFoundException
根本原因不是类没打进 jar,而是 Docker 构建时用了错误的 COPY 路径,或者没跳过 Maven 的 test 阶段导致 fat jar 没生成。
典型错误:COPY target/*.jar app.jar 在多模块项目中会匹配到空目录或 pom.xml 生成的非可执行 jar;正确做法是明确指定构建产物名。
立即学习“Java免费学习笔记(深入)”;