microsoft/openjdk-jdk这些微软构建的OpenJDK容器镜像及相应的Dockerfile设计用于任何Java应用程序或Java应用组件。
目前我们提供基于Linux的容器镜像,支持Ubuntu和微软Azure Linux。镜像发布于微软容器注册表mcr.microsoft.com/openjdk/jdk。你也可以访问mcr.microsoft.com/en-us/product/openjdk/jdk/tags获取最新可用标签列表。
要拉取特定标签的最新镜像,请使用以下命令:
bashdocker pull mcr.microsoft.com/openjdk/jdk:<tag>
下表显示了适用于不同Linux发行版和JDK版本的标签。
| 基础操作系统 | OpenJDK 25 | OpenJDK 21 | OpenJDK 17 | OpenJDK 11 | OpenJDK 8 (1) |
|---|---|---|---|---|---|
| Azure Linux 3.0 (2) | 25-azurelinux | 21-azurelinux | 17-azurelinux | 11-azurelinux | 8-azurelinux |
| Ubuntu 22.04 | 25-ubuntu | 21-ubuntu | 17-ubuntu | 11-ubuntu | 不适用 |
| Azure Linux 3.0 无发行版 | 25-distroless | 21-distroless | 17-distroless | 11-distroless | 8-distroless |
25-mariner、21-mariner、17-mariner、11-mariner和8-mariner),在该Linux发行版重命名和升级后,现在镜像-azurelinux标签。如有需要,用户可通过-mariner-cm2标签降级到CBL Mariner 2.0。基于CBL Mariner 2.0和CBL Mariner 1.0的旧版镜像已终止支持,不应再使用。
| 基础操作系统 | OpenJDK 21 | OpenJDK 17 | OpenJDK 11 | OpenJDK 8 (1) |
|---|---|---|---|---|
| CBL Mariner 2.0 | 21-mariner-cm2 | 17-mariner-cm2 | 11-mariner-cm2 | 8-mariner-cm2 |
| CBL Mariner 1.0 | 不适用 | 17-mariner-cm1 | 11-mariner-cm1 | 不适用 |
上述镜像支持amd64和arm64架构。容器运行时会根据环境拉取相应架构的镜像。要强制拉取特定架构的镜像,请使用以下命令:
bash$ docker pull --platform=linux/arm64 mcr.microsoft.com/openjdk/jdk:17-azurelinux
要在Dockerfile中强制指定架构,可使用以下方式:
DockerfileFROM --platform=linux/arm64 mcr.microsoft.com/openjdk/jdk:17-azurelinux AS build # ...
有关构建多平台容器镜像的更多信息,请查看容器运行时文档,例如Docker和Podman。
dockerfile# 直接使用微软构建的OpenJDK镜像示例 FROM mcr.microsoft.com/openjdk/jdk:17-ubuntu # 继续部署应用 RUN mkdir /opt/app COPY japp.jar /opt/app CMD ["java", "-jar", "/opt/app/japp.jar"]
无发行版镜像基于微软的Azure Linux 3.0发行版。它们需要不同的应用部署方式。由于无发行版镜像不包含完整的Linux发行版,因此没有shell等组件。
这些镜像的ENTRYPOINT已配置为指向java命令。使用时,Dockerfile必须通过CMD指令提供JVM启动进程的命令行参数。
创建包含以下内容的Dockerfile:
dockerfileFROM mcr.microsoft.com/openjdk/jdk:17-distroless COPY app.jar /app.jar CMD ["-Xmx256m", "-jar", "/app.jar"]
如果需要我们未提供的OS基础镜像,可通过Dockerfile中的COPY --from指令复制JDK,示例如下:
dockerfile# 使用微软构建的OpenJDK镜像与其他基础镜像的示例 FROM debian:buster-slim ENV JAVA_HOME /usr/lib/jvm/msopenjdk-17-amd64 ENV PATH "${JAVA_HOME}/bin:${PATH}" COPY --from=mcr.microsoft.com/openjdk/jdk:17-ubuntu $JAVA_HOME $JAVA_HOME # 继续部署应用 RUN mkdir /opt/app COPY japp.jar /opt/app CMD ["java", "-jar", "/opt/app/japp.jar"]
你也可以通过yum或apt-get安装JDK,或直接解压tar.gz文件并配置JAVA_HOME。了解更多。
要创建自定义Java运行时镜像,可使用类似以下示例的Dockerfile:
dockerfile# 多阶段构建中使用jlink创建自定义Java运行时示例 FROM mcr.microsoft.com/openjdk/jdk:17-ubuntu as runtime-build # 创建自定义Java运行时 RUN $JAVA_HOME/bin/jlink \ --add-modules java.base \ --strip-debug \ --no-man-pages \ --no-header-files \ --compress=2 \ --output /javaruntime # 定义基础镜像,可选择任何所需的OS及版本 FROM debian:buster-slim ENV JAVA_HOME /usr/lib/jvm/msopenjdk-17-amd64 ENV PATH "${JAVA_HOME}/bin:${PATH}" COPY --from=runtime-build /javaruntime $JAVA_HOME # 继续部署应用 RUN mkdir /opt/app COPY japp.jar /opt/app CMD ["java", "-jar", "/opt/app/japp.jar"]
有关创建自定义Java运行时的更多信息,请参见使用jlink的Java运行时
微软构建的OpenJDK容器镜像仅提供前述列出的标签。我们不发布次要版本标签,主版本标签始终包含最新的次要版本,以确保开发人员始终获得特定主版本的最新更新。
这些基础镜像使用Linux发行版的底层包管理器机制安装JDK包。因此,要保持特定版本,需使用apt-get或yum等工具安装特定的JDK次要版本。
可在Dockerfile中按以下示例配置:
Ubuntu示例:
DockerfileFROM mcr.microsoft.com/openjdk/jdk:11-ubuntu ... RUN apt-get update && \ apt-get install -y --allow-downgrades msopenjdk-11=11.0.26-1 ...
Azure Linux示例:
DockerfileFROM mcr.microsoft.com/openjdk/jdk:11-azurelinux ... RUN tdnf update -y && \ tdnf install -y --nogpgcheck msopenjdk-11-11.0.26-1 ...
有关此主题的更多信息和详细说明,请访问微软构建的OpenJDK文档。
访问MCR获取最新标签列表。
无。
微软构建的OpenJDK支持
请将关于Docker镜像的反馈发送至microsoft/openjdk-docker

manifest unknown 错误
TLS 证书验证失败
DNS 解析超时
410 错误:版本过低
402 错误:流量耗尽
身份认证失败错误
429 限流错误
凭证保存错误
来自真实用户的反馈,见证轩辕镜像的优质服务