优先使用 openjdk 或 eclipse-temurin 官方镜像,如 openjdk:17-jdk-slim(构建)和 openjdk:17-jre-slim(运行),避免在 Ubuntu/Alpine 基础镜像中手动安装 JDK/JRE,尤其 Alpine 上 openjdk17-jdk 不兼容 musl libc;推荐多阶段构建,构建用 JDK,运行用 JRE,确保镜像轻量、安全、可靠。

直接用官方镜像最稳妥,不建议在容器里手动装 JDK。
优先选 openjdk 官方镜像,而不是自己 apt 或 apk 安装
Docker Hub 上的 openjdk 镜像已预装好 JDK 或 JRE,版本清晰、更新及时、安全可控。比如:
-
openjdk:17-jdk-slim:带完整 JDK 的轻量 Debian 镜像,适合构建阶段 -
openjdk:17-jre-slim:仅含 JRE,体积小、攻击面小,适合运行 Spring Boot 等应用 -
eclipse-temurin:17-jre-alpine:基于 Alpine,注意选 17.0.2-jre-alpine 及之后版本才稳定支持 musl libc
手动在基础镜像(如 ubuntu:22.04 或 alpine:3.19)里 apt install openjdk-17-jdk 或 apk add openjdk17-jdk 容易出问题:
立即学习“Java免费学习笔记(深入)”;
- Alpine 上 musl libc 与多数 OpenJDK 二进制包(为 glibc 编译)不兼容,可能启动卡死或报
NoClassDefFoundError -
openjdk17-jdk在 Alpine 中实际不可靠,openjdk17-jre更稳但也不推荐自建
多阶段构建是生产推荐做法
# 构建阶段:用 JDK 编译 FROM maven:3.9-eclipse-temurin-17 AS builder WORKDIR /app COPY pom.xml . COPY src ./src RUN mvn package -DskipTests # 运行阶段:只用 JRE FROM eclipse-temurin:17-jre-slim WORKDIR /app COPY --from=builder /app/target/*.jar app.jar EXPOSE 8080 ENTRYPOINT ["java", "-XX:+UseContainerSupport", "-jar", "app.jar"]
这样最终镜像不含编译工具,体积更小,启动更快,也更安全。
如果真要手动安装(仅限调试或特殊场景)
使用 Python 脚本下载 Docker 镜像并打包为 tar 文件。用户说“下载镜像”“拉取镜像”“pull xxx”“帮我下载 nginx 镜像”等时触发。支持 SOCKS5 代理直连(推荐)和国内镜像站加速两种模式。
-
基于 Debian/Ubuntu 镜像:
RUN apt-get update && apt-get install -y openjdk-17-jdk && rm -rf /var/lib/apt/lists/* ENV JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64 ENV PATH=$JAVA_HOME/bin:$PATH
-
基于 Alpine 镜像(不推荐):
RUN apk add --no-cache openjdk17-jre ENV JAVA_HOME=/usr/lib/jvm/java-17-openjdk ENV PATH=$JAVA_HOME/bin:$PATH
⚠️ 注意:
openjdk17-jdk在 Alpine 中基本不可用,别试。
验证是否装对了
构建后加一句测试命令:
RUN java -version && java -XshowSettings:properties -version 2>/dev/null | grep java.home
能输出版本号 + 正确 java.home 路径,才算真正可用。
不复杂但容易忽略。

















